草庐IT

Inheritance

全部标签

c# - 如何在 C# 中基于现有委托(delegate)类型创建新的委托(delegate)类型?

有什么方法可以在现有委托(delegate)类型的基础上创建新的委托(delegate)类型?就我而言,我想创建一个委托(delegate)MyMouseEventDelegate这将具有与EventHandler相同的功能.我为什么要这个?当然是利用编译时类型检查!这样,我可以有两个不同的委托(delegate):MyRightClickHandler和MyLeftClickHandler,永远不要混淆这两个-即使它们在功能上都与EventHandler相同.有语法来做这种事吗?哦,代码如下:usingMyRightClickHandler=EventHandler还不够好。它不进行

C#抽象类静态字段继承

我觉得我跳过了一两节C#课,但这是我的困境:我有一个抽象类,我从中派生了多个子类。我确信对于每个子类我都会有一个构造函数,它需要一个特定的静态对象作为模型,并且这个对象对于每个子类都是不同的。我的第一个方法是在抽象父类中创建一个公共(public)静态对象,然后,在我开始创建子类的任何实例之前,我会为每个子类修改它,但事实证明,这样我实际上只为抽象类创建一个静态对象,它的每个子类都使用它。我该如何解决这个问题?更准确地说,这是伪代码:父抽象类:abstractclassAbstractClass{staticpublicModelObjectModel;...}子类之一:classCh

c# - 覆盖接口(interface)中声明的方法实现

我有一个接口(interface),里面有几个方法。interfaceIMyInterface{//...voidOnItemClicked()//...}和一个实现classMyClass:IMyInterface{//OthermethodspublicvoidOnItemClicked(){/*...*/}}现在,我想要一个行为类似于MyClass的类,除了OnItemClicked()之外,我想对该方法进行一些修改。我想继承覆盖但我不想更改MyClass(例如:publicvirtualvoidOnItemClicked()。..)因为它不是我的实现,我不想再次实现IMyInt

c# - 迭代器 block 和继承

给定一个具有以下接口(interface)的基类:publicclassBase{publicvirtualIEnumerableGetListOfStuff(){yieldreturn"First";yieldreturn"Second";yieldreturn"Third";}}我想创建一个重写方法的派生类,并添加自己的东西,如下所示:publicclassDerived:Base{publicoverrideIEnumerableGetListOfStuff(){foreach(stringsinbase.GetListOfStuff()){yieldreturns;}yield

C#:如何从派生类的静态方法调用基类的静态方法?

在C#中,我有基类Product和派生类Widget。产品包含静态方法MyMethod()。我想从静态方法Widget.MyMethod()调用静态方法Product.MyMethod()。我不能使用base关键字,因为它只适用于实例方法。我可以显式调用Product.MyMethod(),但如果我稍后将Widget更改为从另一个类派生,我必须修改该方法。C#中是否有一些类似于base的语法允许我从派生类的静态方法调用基类的静态方法? 最佳答案 static方法基本上是一种从面向对象概念回退的方法。因此,它们在继承层次结构中不是很灵

c# - 为什么 C# 类可以隐式和显式地从一个接口(interface)继承?

今天偶然发现一个C#类可以隐式和显式继承一个接口(interface)。这让我很吃惊。如果C#以这种方式工作,那么当以不同方式引用时,一个实例可能会有不同的行为。interfaceIFoo{voidDoSomething();}classFoo:IFoo{#regionIFooMemberspublicvoidDoSomething(){Console.WriteLine("dosomethingimplicitly");}#endregion#regionIFooMembersvoidIFoo.DoSomething(){Console.WriteLine("dosomethinge

c# - 如何在 C# 中覆盖继承的类属性?

我学会了如何通过向基类中的方法添加virtual并在新类中添加override来继承方法。但是我该怎么做才能继承属性呢?classbird{privatevirtualstringfly="Yes,Ican!";publicstringCanI(){returnfly;}}classpenguin:bird{privateoverridestringfly="No,Ican't!";}这会弹出一个错误,说明不应在此处使用修饰符virtual/override。 最佳答案 fly不是一个属性,它是一个字段。字段不可覆盖。你可以这样做:

C#继承。从基类派生类

我有一个基类publicclassA{publicstrings1;publicstrings2;}我还有一个派生类:publicclassB:A{publicstrings3;}假设我的程序创建了一个类A的实例。AaClassInstance=newA();设置了一些参数:aClassInstance.s1="string1";aClassInstance.s2="string2";此时我想创建一个类B的实例。但我希望B已经具有我的类A实例的值。这没有用:publicBbClassInstance=newB():bClassInstance=(B)aClassInstance;这也没

C#.NET - 如何让 typeof() 与继承一起工作?

我将从用代码解释我的场景开始:publicclassA{}publicclassB:A{}publicclassC:B{}publicclassD{}publicclassTest{privateAa=newA();privateBb=newB();privateCc=newC();privateDd=newD();publicTest(){//Evaluatesto"false"if(a.GetType==typeof(B)){}//TODO:AddLogic//Evaluatesto"true"if(b.GetType==typeof(B)){}//TODO:AddLogic//I

c# - 为什么基类规范的含义不能递归地依赖于 C# 中的自身?

以下C#代码无法编译:publicclassA{publicinterfaceB{}}publicclassC:A,C.B//Errorgivenhere:Thetypename'B'doesnotexistinthetype'C'.{}publicclassD:C.B//Compileswithoutproblemsifwecommentout'C.B'above.{}根据C#4.0规范(第10.1.4.1段),此行为是正确的:WhiledeterminingthemeaningofthedirectbaseclassspecificationAofaclassB,thedirect