jjzjj

overriding

全部标签

c# - 事件与可重写的方法?

关于什么时候应该使用可重写的方法(例如“OnMyEvent”)以及什么时候应该在C#中使用事件(例如“MyEvent”),任何人都可以给我提供一般指导吗?是否有任何通用设计原则可以定义要使用的内容? 最佳答案 这两个功能有些相似(都旨在执行某种形式的动态调度),但不能直接比较。事件是为了通知其他对象某个对象已经到达某种statetransition。.它是体现theObserverDesignPattern的语言特征.这在很多情况下都很有用,但并不总是有用或可取的。它是完成特定工作的工具。虚函数用于创建ObjectOrientedP

c# - 如何在静态类中覆盖 ToString?

我有一个公共(public)静态类,我希望在其中有一个ToString()方法。我已将其定义为publicstaticstringToString(),但收到以下警告:'Class.ToString()'hidesinheritedmember'object.ToString()'.Tomakethecurrentmemberoverridethatimplementation,addtheoverridekeyword.Otherwiseaddthenewkeyword.如果我添加override关键字,则会收到此错误:Astaticmember'Class.ToString()'c

c# - 在没有不可变字段的类中覆盖 Object.GetHashCode() 时返回什么?

好吧,在你因为互联网上发布了数百个听起来相似的问题而生气之前,我可以向你保证,我刚刚花了最后几个小时阅读了所有并且没有找到了我的问题的答案。背景:基本上,我的一个大型应用程序一直遇到这样一种情况,即ListBox.SelectedItem属性上的某些Binding会停止工作,或者程序会在之后崩溃对当前选定的项目进行了编辑。我最初问'Anitemwiththesamekeyhasalreadybeenadded'ExceptiononselectingaListBoxItemfromcode在这里提问,但没有得到答案。直到本周我才有时间解决这个问题,当时我有几天时间来解决它。现在长话短说

c# - 使用派生类型和同名 C# 覆盖属性

我试图用不同但派生类型相同的名称覆盖基类中的属性。我认为可以通过协变或泛型来实现,但我不确定该怎么做?以下代码得到错误:Error1'Sun.Cache':typemustbe'OuterSpace.Cache'tomatchoverriddenmember'OuterSpace.Cache'publicclassOuterSpace{publicvirtualOuterSpaceDataData{get;set;}publicvirtualOuterSpaceAnalysisAnalysis{get;set;}publicvirtualOuterSpaceCacheCache{get

c# - 使用反射动态覆盖 ToString()

我通常重写ToString()方法以输出属性名称和与它们关联的值。我有点厌倦了手写这些,所以我正在寻找一个动态的解决方案。主要内容:TestingClasstc=newTestingClass(){Prop1="blah1",Prop2="blah2"};Console.WriteLine(tc.ToString());Console.ReadLine();测试类:publicclassTestingClass{publicstringProp1{get;set;}//propertiespublicstringProp2{get;set;}publicvoidMethod1(stri

c# - 在方法覆盖中更改 params 修饰符

我知道params修饰符(将数组类型的一个参数转换为所谓的“参数数组”)不是方法签名的一部分。现在考虑这个例子:classGiraffid{publicvirtualvoidEat(int[]leaves){Console.WriteLine("G");}}classOkapi:Giraffid{publicoverridevoidEat(paramsint[]leaves){Console.WriteLine("O");}}编译时没有警告。然后说:varokapi=newOkapi();okapi.Eat(2,4,6);//willnotcompile!给出错误(方法“Eat”没有重

c# - C#泛型是如何实现的?

我曾认为C#中的泛型的实现方式是在运行时或编译时生成新的类/方法/你有什么,当使用新的泛型类型时,类似于C++模板(我从未真正研究过,我很可能是错的,对此我很乐意接受更正)。但是在我的编码中我想出了一个确切的反例:staticclassProgram{staticvoidMain(){TesttestVar=newTest();GenericTestgenericTest=newGenericTest();intgen=genericTest.Get(testVar);RegularTestregTest=newRegularTest();intreg=regTest.Get(test

c# - 为什么不在构造函数中调用可覆盖的方法?

这是一个过于简单的例子,但我有一些现实生活中的代码在概念上做同样的事情(试图验证派生类的值“设置”访问器方法),分析器给我“不要调用可重写的方法build者。”我想弄清楚我是否应该更改我的代码,或者忽略警告。我想不出有什么理由应该注意这个警告。publicabstractclassSimpleUrl{protectedstring_url;publicabstractstringUrl{get;set;}publicSimpleUrl(){}publicSimpleUrl(stringUrl){this.Url=Url;}}publicclassHttpUrl:SimpleUrl{pu

c# - 为什么重载方法的优先级低于实例方法

我有基类ApublicclassA{publicvirtualvoidMethod(Aparameter){Console.WriteLine(MethodBase.GetCurrentMethod());}publicvirtualvoidMethod(Bparameter){Console.WriteLine(MethodBase.GetCurrentMethod());}}继承BpublicclassB:A{publicvirtualvoidMethod(objectparameter){Console.WriteLine(MethodBase.GetCurrentMethod(

c# - 根据子类指定基类抽象方法的返回类型

我有以下结构:abstractclassBase{publicabstractListGet();//Whatshouldbethegenerictype?}classSubOne:Base{publicoverrideListGet(){}}classSubTwo:Base{publicoverrideListGet(){}}我想创建一个抽象方法,返回具体子类的任何类。因此,正如您从示例中看到的那样,SubOne中的方法应该返回List而SubTwo中的方法应该返回List.我在基类中声明的签名中指定什么类型?[更新]感谢您发布的答案。解决方案是使抽象类通用,如下所示:abstrac