Tag: oop

C#中的多重inheritance

当我作为C#开发人员工作时,我知道我们可以通过使用Interface实现multiple inheritance 。 任何人都可以提供链接或代码,了解如何使用C#实现multiple inheritance 。 我想要使​​用Interface在C#实现多重inheritance的代码。 提前致谢。

与C#数组的协方差和逆差

在阅读维基百科关于协方差和逆变的文章的一部分时,我遇到了以下粗体句: 首先考虑数组类型构造函数:从类型Animal我们可以创建类型Animal[] (“动物数组”)。 我们应该把它视为 协变: Cat[]是Animal[] 逆变: Animal[]是Cat[] 或两者(不变)? 如果我们希望避免类型错误,并且数组支持读取和写入元素,那么只有第三种选择是安全的。 显然,并非每个Animal[]都可以被视为Cat[] ,因为从数组中读取的客户端将期望Cat,但Animal[]可能包含例如Dog 。 所以逆变规则并不安全。 相反, Cat[]不能被视为Animal[] 。 应该总是可以将Dog放入Animal[] 。 对于协变数组,这不能保证是安全的,因为后备存储实际上可能是一组猫。 所以协变规则也不安全 – 数组构造函数应该是不变的。 请注意,这只是可变数组的一个问题; 协变规则对于不可变(只读)数组是安全的。 我理解这个概念; 我只是想要一个如何在C#中“无法保证安全”的例子 。

C#抽象结构

如何在C#中使用结构实现inheritance(或类似)? 我知道抽象结构是不可能的,但我需要实现类似的东西。 我需要它作为结构,因为它必须是一个值类型。 我需要inheritance,因为我需要一个通用数组和方法,我可以保证在那里。 我认为一个例子会有很长的路要走,所以有些代码不能编译,但会显示我想要实现的内容; abstract struct Vertex { abstract int SizeInBytes; abstract void SetPointers(); } struct ColorVertex : Vertex { Vector3 Position; Vector4 Color; override int SizeInBytes //static { get { return (3 + 4) * 4; } } override void SetVertexPointers() //static { … } } class main { static void main() { […]

访问非静态成员需要对象引用

我有这个错误出现,我不知道为什么……我试图查找它,人们说要创建类的对象或创建方法为静态…但我是不确定如何。 这是我的代码如下: public class SoundManager : MonoBehaviour { public List audioSounds = new List(); public double minTime = 0.5; public static void playSound(AudioClip sourceSound, Vector3 objectPosition, int volume, float audioPitch, int dopplerLevel) { bool playsound = false; foreach (AudioSource sound in audioSounds) // Loop through List with foreach { if (sourceSound.name != sound.name && sound.time […]

派生类型的通用基类

我有以下代码。 class Header where T: IItem { } class HeaderA : Header { } class HeaderB : Header { } interface IItem { } class ItemA : IItem { } class ItemB : IItem { } Header h = new HeaderA(); 最后一行无法编译。 Cannot implicitly convert type ‘UserQuery.HeaderA’ to ‘UserQuery.Header’ HeaderA是Header的子类型,ItemA是IItem的子类型。 为什么它不起作用?

使用一种forms的控制到另一种forms

我有一个应用程序,在一种forms( Form1 )我有很多checkBoxes和textBoxes,在Form2我只有一个textBox,但我想从Form1文本框中放入一些内容并放入Form2文本框,像这样,但在表单之间: textBox1.Text = “Test: ” + textBox1 + “\n” + textBox3; 作为Form2的textBox1和Form1的第二个textBox1和textBox3 ,但我怎么能这样做? 谢谢。

什么是C#相当于PHP的“self ::”?

在C#中,当我想从该类的另一个静态方法调用类的静态方法时,是否有一个我可以使用的generics前缀 ,例如PHP的self::而不是类名? 所以在下面的例子中,我不是说Customer.DatabaseConnectionExists() ,而是如何说出类似Self.DatabaseConnectionExists()东西,所以后来如果我更改类的名称我不必更改所有的前缀? class Customer { public string FirstName { get; set; } public string LastName { get; set; } public static Customer GetCurrentCustomer() { if (Customer.DatabaseConnectionExists()) { return new Customer { FirstName = “Jim”, LastName = “Smith” }; } else { throw new Exception(“Database connection does not exist.”); } } public static bool […]

在C#中创建接口实例

我正在使用C#中的MS Excel互操作,我不明白这个特定的代码行是如何工作的: var excel = new Microsoft.Office.Interop.Excel.Application(); 其中Microsoft.Office.Interop.Excel.Application是INTERFACE,定义如下: [Guid(“000208D5-0000-0000-C000-000000000046”)] [CoClass(typeof(ApplicationClass))] public interface Application : _Application, AppEvents_Event { } 我认为当界面用CoClass属性修饰时会发生一些魔法,但是我们怎么可能用新关键字创建一个接口实例呢? 它不应该生成编译时错误吗?

C# – CLR在inheritance期间如何组织内存/引用?

假设我有如下代码片段:( 澄清目的/没有很好地形成 ) class Employee { #region fields protected string _empID; protected string _empName; protected readonly string _ssn; #endregion public Employee(){} public Employee(string _empID,string _empName,string _ssn) { this._empID =_empID; this._empName=_empName; this._ssn = _ssn; } } class Manager : Employee { private string _branchID; public Manager(int _branchID):base(string _empID,string _empName,string _ssn) { this._branchID=_branchID; } } static void […]

如何在c#中访问静态方法?

当我们在类中有静态方法时,它只访问静态成员,静态方法只能访问类名。 所以我无法访问我的示例中的静态方法: class myclass { int i ; static int j ; static void get() { j = 101; Console.WriteLine(j.ToString ()); } public void test() { i = 11; j = 12; Console.WriteLine(i.ToString()); Console.WriteLine(j.ToString()); } } class Program { static void Main(string[] args) { myclass clsmyclas = new myclass(); clsmyclas.test(); Console.ReadLine(); } } }