jjzjj

polymorphism

全部标签

c# - 多态和类型转换

我想了解C#中的多态性,因此通过尝试几种构造,我想到了以下情况:classShape{publicvirtualvoidDraw(){Console.WriteLine("Shape.Draw()");}}classCircle:Shape{publicoverridevoidDraw(){Console.WriteLine("Circle.Draw()");}}我明白,为了将Draw()消息发送到几个相关对象,以便它们可以根据自己的实现执行操作,我必须更改(在本例中)形状“指向”的实例:Shapeshape=newCircle();shape.Draw();//OK;Thisprin

c# - C# 中的多态性、重载和泛型

classPoly{publicstaticvoidWriteVal(inti){System.Console.Write("{0}\n",i);}publicstaticvoidWriteVal(strings){System.Console.Write("{0}\n",s);}}classGenWriter{publicstaticvoidWrite(Tx){Poly.WriteVal(x);}}为什么在C#中不接受无辜的(对于C++程序员)方法Write?您可以看到编译器尝试将参数类型T与具体重载相匹配before实例化:错误3Thebestoverloadedmethodmat

c# - 多态基础

我现在正在研究继承和多态性,我遇到了这样一个概念,即编译器将评估(使用反射?)什么类型的对象存储在基类型引用中,以便决定在什么方法上运行调用具有覆盖的方法。例如:classShape{publicvirtualvoidDraw(){Console.WriteLine("Drawingshape...");}}classCircle:Shape{publicoverridevoidDraw(){Console.WriteLine("Drawingcircle...");}}staticvoidMain(){ShapetheShape=newCircle();theShape.Draw()

c# - 隐藏在 c# 中的方法以及一个有效的例子。为什么在框架中实现?什么是现实世界的优势?

谁能用一个有效的例子来解释C#中方法隐藏的实际用法?如果方法是在派生类中使用new关键字定义的,那么它不能被覆盖。然后它与创建一个具有不同名称的新方法(除了基类中提到的方法)一样。是否有使用new关键字的特定原因? 最佳答案 我有时对new关键字的一个用途是在平行继承树中用于“穷人属性协方差”。考虑这个例子:publicinterfaceIDependency{}publicinterfaceConcreteDependency1:IDependency{}publicclassBase{protectedBase(IDepende

c# - 是否有理由在界面中隐藏继承的成员?

我知道从另一个类继承的类可以使用new关键字隐藏属性。但是,这隐藏了该属性的特定实现,因此我可以了解如何使用它。在实现其他接口(interface)的接口(interface)中隐藏成员是否有任何实际原因?例如考虑下面的例子。IChildInterface实现了IParentInterface,并隐藏了PropertyA。interfaceIParentInterface{stringName{get;set;}intPropertyA{get;set;}intPropertyB{get;set;}}interfaceIChildInterface:IParentInterface{i

c# - .NET对不同参数重载方法的误解(Call Ambiguous)

我有一些重载方法的问题,我会尝试给出一个简单的实现。所以这是一个包含以下两个方法的类:publicclassMyRepo{publicListGetData(Expression>expression){//Dosomething}publicListGetData(FuncwhereClause){//Dosomething}}这是我的实体:publicclassMyEntity{publicintId{get;set;}publicstringName{get;set;}}这里是我使用它的地方:{...MyRepomyRepo=newMyRepo();myRepo.GetData(

c# - 我可以防止继承的虚方法在子类中被覆盖吗?

我有一些类是这样布局的classA{publicvirtualvoidRender(){}}classB:A{publicoverridevoidRender(){//PreparetheobjectforrenderingSpecialRender();//Dosomecleanup}protectedvirtualvoidSpecialRender(){}}classC:B{protectedoverridevoidSpecialRender(){//Dosomecoolstuff}}是否可以在不破坏以下代码的情况下防止C类覆盖Render方法?Aobj=newC();obj.Re

c# - 你如何在 Ruby 中实现多态性?

在C#中,我可以这样做:classProgram{staticvoidMain(string[]args){Listanimals=newList();animals.Add(newDog());animals.Add(newCat());foreach(Animalainanimals){Console.WriteLine(a.MakeNoise());a.Sleep();}}}publicclassAnimal{publicvirtualstringMakeNoise(){returnString.Empty;}publicvoidSleep(){Console.Writeline

c# - "Cannot be determined because there is no implicit conversion"如果返回则为三进制

如果返回,我有以下ASP.NETWebApi2操作和三元:[HttpDelete]publicIHttpActionResultDelete(){booldeleted;//...returndeleted?this.Ok():this.NotFound();}我收到一个Typeofconditionalexpressioncannotbedeterminedbecausethereisnoimplicitconversionbetween'System.Web.Http.Results.OkResult'and'System.Web.Http.Results.NotFoundResu

C#继承。从基类派生类

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