jjzjj

Overriding

全部标签

c# - 具有覆盖属性和反射的奇怪效果

我在.NET/Reflection中遇到了一个奇怪的行为,找不到任何解决方案/解释:classA{publicvirtualstringTestString{get;set;}}classB:A{publicoverridestringTestString{get{return"x";}}}由于属性只是函数对(get_PropName()、set_PropName()),因此仅覆盖“get”部分应该保留“set”部分在基类中。如果您尝试实例化B类并为TestString赋值,就会发生这种情况,它使用A类的实现。但是如果我在反射中查看类B的实例化对象会发生什么:PropertyInfop

c# - 隐式 (bool) 和 == 运算符覆盖 - 正确处理 if 语句

我有一个自定义类,它实现了bool运算符的==和implicit。这是处理所有可能的if==/!=语句并获得预期结果的正确方法吗?像这样:publicclassFoo{publicboolResult{get;set;}publicstaticbooloperator==(bool@bool,Foofoo){returnEquals(foo,@bool);}publicstaticbooloperator!=(bool@bool,Foofoo){returnNotEquals(foo,@bool);}publicstaticbooloperator==(Foofoo,bool@bool

c# - 什么时候应该覆盖 OnEvent 而不是在继承时订阅事件

什么时候应该做以下事情?classFoo:Control{protectedoverridevoidOnClick(EventArgse){//newcodehere}}与此相反?classFoo:Control{publicFoo(){this.Click+=newEventHandler(Clicked);}privatevoidClicked(objectsender,EventArgse){//code}} 最佳答案 覆盖而不是附加委托(delegate)将产生更高效的代码,因此通常建议您始终尽可能这样做。有关详细信息,请参

c# - 是否可以使用派生参数而不是基本参数来覆盖方法?

我陷入了这种情况:我有一个名为Ammo的抽象类,其中有AmmoBox和Clip作为子类。我有一个名为Weapon的抽象类,Firearm和Melee作为子类。Firearm是抽象的,ClipWeapon和ShellWeapon作为子项。在Firearm里面,有一个voidReload(Ammoammo);问题是,ClipWeapon可以同时使用Clip和AmmoBox来装弹:publicoverridevoidReload(Ammoammo){if(ammoisClip){SwapClips(ammoasClip);}elseif(ammoisAmmoBox){varammoBox=a

c# - 派生的 C# 接口(interface)属性是否可以覆盖同名的基本接口(interface)属性?

我正在尝试创建一个接口(interface)继承系统,该系统使用相同的属性但始终具有进一步派生的类型。因此,基本属性应该以某种方式被派生接口(interface)覆盖或隐藏。例如,派生到Husband和Wife的两个接口(interface)Man和Woman也是接口(interface)。Man和Husband接口(interface)都有一个“sweetheart”属性,而Woman和Wife有一个“darling”属性。现在,Man的“sweetheart”属性是Woman类型,而Husband的同一个“sweetheart”属性应该是Wife(派生自Woman)。女人和妻子的“

c# - 内部抽象方法。为什么会有人拥有它们?

我今天正在做一些代码审查,发现了一些开发人员编写的旧代码。事情是这样的publicabstractclassBaseControl{internalabstractvoidDoSomething();}如果在同一个程序集中有一个派生类,它就可以工作publicclassDerivedControl:BaseControl{internaloverridevoidDoSomething(){}}但是在不同的程序集中派生基类会产生编译时错误DerivedControldoesnotimplementinheritedabstractmember'BaseControl.DoSomethin

c# - C#中的自动类型转换

我知道您可以覆盖对象的ToString()方法,这样每次调用对象或将其传递给需要字符串类型的函数时,它都会被转换为字符串。我已经为对象类型'object'写了几个扩展方法publicstaticDateTimeToDate(thisobjectdate){returnDateTime.Parse(date.ToString());}publicstaticintToInteger(thisobjectnum){returnInt32.Parse(num.ToString());}publicstaticlongToLong(thisobjectnum){returnInt64.Pars

c# - 如何在 C# 中覆盖 default(T)?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:HowtochangewhatDefault(T)returnsinC#print(default(int)==0)//true同样,如果我有一个自定义对象,它的默认值将为null。print(default(Foo)==null)//true我可以为default(Foo)设置一个自定义值而不是null吗?例如,像这样:publicstaticoverrideFoodefault(){returnnewFoo();}这不会编译。谢谢..

c# - 覆盖方法中的默认参数值

在下面的代码中,对Method2的调用接收值为False的Value参数,即使基类根本没有为该参数声明默认值,而派生类将True声明为默认值。可以说(正如此处类似示例所做的那样:C#optionalparametersonoverriddenmethods)编译器首先使用基类的方法声明(这是真的,因为可以通过在调用Method1前加上前缀来更改此行为this.),但在这种情况下,基根本不声明默认值。对此有合理的解释吗?usingSystem;classBase{publicvirtualboolMethod1(boolValue){returntrue;}publicvirtualbo

C# 从基类隐藏、覆盖和调用函数

我正在学习C#,但遇到了以下问题。我有两个类:基类和派生类:classMyBase{publicvoidMyMethod(){Console.WriteLine("MyBase::MyMethod()");}}classMyDerived:MyBase{publicvoidMyMethod(){Console.WriteLine("MyDerived::MyMethod()");}}目前,没有virtual和override关键词。当我编译它时,我收到警告(这当然是预期的)我试图从MyBase类中隐藏MyMethod。我想做的是从具有派生类实例的基类调用方法。我这样做是这样的:MyDe