我想在我的一个类中重新定义ToString()函数。我写了publicstringToString()...一切正常。但是ReSharper告诉我将其更改为publicnewstringToString()或publicoverridestringToString()有什么区别?为什么C#需要这样的东西? 最佳答案 如果您使用publicstringToString(),则不清楚您打算做什么。如果你想通过多态性改变ToString的行为,那么override。您可以添加一个newToString(),但这很愚蠢。不要那样做!区别在于
我覆盖了类的Equals()来比较Guid类型的ID值。然后VisualStudio警告:...overridesObject.Equals(objecto)butdoesnotoverrideObject.GetHashCode()然后我也像这样覆盖了它的GetHashCode():publicpartialclassSomeClass{publicoverrideboolEquals(Objectobj){//Checkfornullandcomparerun-timetypes.if(obj==null||this.GetType()!=obj.GetType())returnf
我有以下类(class):classBase{publicvirtualvoidPrint(){Console.WriteLine("Base");}}classDer1:Base{publicnewvirtualvoidPrint(){Console.WriteLine("Der1");}}classDer2:Der1{publicoverridevoidPrint(){Console.WriteLine("Der2");}}这是我的主要方法:Baseb=newDer2();Der1d1=newDer2();Der2d2=newDer2();b.Print();d1.Print();
我在C#中覆盖父类的方法时遇到问题。父类设置如下:publicclassBase{publicBase(Game1game){this.game=game;}publicvirtualvoidDraw(){}}...还有子类:publicclassExt:Base{publicExt(Game1game):base(game){}publicoverridevoidDraw(SpriteBatchbatch){}}我知道我过去已经成功地覆盖了一个父方法,而现在我可能忽略了一些非常简单的事情......它是什么?编辑:那实际上是一个拼写错误:在实际的脚本中,Ext确实派生自Base。问题
在类层次结构中定义方法时,C#中的override和new关键字有什么区别? 最佳答案 下一页很好地总结了您的问题。KnowingWhentoUseOverrideandNewKeywords总结覆盖:当基类的方法在派生类中被覆盖时,将使用派生类中的版本,即使调用代码“不知道”该对象是派生类的实例。New:如果您使用new关键字而不是override,派生类中的方法不会覆盖基类中的方法,它只是隐藏它。如果您既没有指定new也没有指定overrides,生成的输出与您指定new时的结果相同,但您还会收到编译器警告(因为您可能不知道您隐
我对OOP的一些概念很困惑:virtual、override、new和sealedoverride.谁能解释一下区别?我很清楚,如果要使用派生类方法,可以使用override关键字,这样基类方法将被派生类覆盖。但我不确定new和sealedoverride。 最佳答案 virtual关键字用于修改方法、属性、索引器或事件声明,并允许它在派生类中被覆盖。例如,这个方法可以被任何继承它的类覆盖:使用new修饰符显式隐藏从基类继承的成员。要隐藏继承的成员,在派生类中使用相同的名称声明它,并使用new修饰符对其进行修改。这一切都与多态性有关
我有一个单元测试,我必须模拟一个返回bool类型的非虚拟方法publicclassXmlCupboardAccess{publicboolIsDataEntityInXmlCupboard(stringdataId,outstringnameInCupboard,outstringrefTypeInCupboard,stringnameTemplate=null){returnIsDataEntityInXmlCupboard(_theDb,dataId,outnameInCupboard,outrefTypeInCupboard,nameTemplate);}}所以我有一个XmlCu
想知道以下内容之间的区别:案例1:基类publicvoidDoIt();案例一:继承类publicnewvoidDoIt();案例2:基类publicvirtualvoidDoIt();案例二:继承类publicoverridevoidDoIt();根据我运行的测试,案例1和案例2似乎具有相同的效果。有区别或首选方式吗? 最佳答案 Theoverridemodifiermaybeusedonvirtualmethodsandmustbeusedonabstractmethods.Thisindicatesforthecompiler
在基类型“virtual”中声明一个方法然后使用“override”关键字在子类型中覆盖它与简单地使用有什么区别在子类型中声明匹配方法时的“new”关键字? 最佳答案 我总是发现这样的事情用图片更容易理解:同样,采用josephdaigle的代码,publicclassFoo{public/*virtual*/boolDoSomething(){returnfalse;}}publicclassBar:Foo{public/*overrideornew*/boolDoSomething(){returntrue;}}如果您随后这样调
我正在开发一个简单的命令行工具,但我发现默认的Usage消息有点欠缺。我想定义我自己的,我认为我做对了我指的是thisexample.我注释掉了我编写的大部分代码,因此包含main函数的文件现在看起来像这样:packagemainimport("flag""fmt""os")funcmain(){//setthecustomUsagefunctionsetupFlags(flag.CommandLine)//defineflags...//thenparseflagsflag.Parse()//customcodethatusesflagvalues...}funcsetupFlags