草庐IT

Inheritance

全部标签

c# - 我可以从 Dapper 查询返回多个派生类型的集合吗

我有一个类似这样的类结构:publicabstractclassDevice{publicintDeviceId{get;set;}//AdditionalProperties}publicclassDeviceA:Device{//SpecificBehaviour}publicclassDeviceB:Device{//SpecificBehaviour}我需要检索设备列表,或实例化为适当派生类型的单个设备(基于数据库中设备记录中的类型值)。也就是说,Device对象的集合应该包含许多具有不同类型的对象,所有这些对象都派生自Device。我已经通过以下方式实现了这一点,但总觉得有些

c# - 固有实现的接口(interface)

我经常想创建一个对象列表,其中每个对象都必须实现多个接口(interface)。例如,我想做类似于以下的事情:ListwhereT:IConvertible,IComparable_myList;我考虑的另一个选择是创建第三个接口(interface)来实现这两个接口(interface),这样任何实现这两个接口(interface)的对象都可以内在地实现我的接口(interface)。publicinterfaceIConvertibleAndComparable:IConvertible,IComparable{}List_myList;有了这个,我将能够添加任何同时实现了ICon

c# - 覆盖派生类中的自定义属性

我们有一个自定义属性[AttributeUsage(AttributeTargets.All,AllowMultiple=true)]publicclassCustomDesignerAttribute:Attribute然后我们有一个用这个属性修饰的基类[CustomDesigner(someKey,someValue)]publicclassBaseClass然后我们有一个派生自这个的类,装饰有相同的属性(具有相同的键,不同的值)[CustomDesigner(someKey,someOtherValue)]publicclassChildClass:BaseClass是否有可能C

c# - 方法隐藏在 C# 中如何工作? (第二部分)

下面的程序打印A:C(A,B)B:C(A,B)(应该如此)publicinterfaceI{stringA();}publicclassC:I{publicstringA(){return"A";}publicstringB(){return"B";}}publicclassA{publicvirtualvoidPrint(Cc){Console.WriteLine("A:C("+c.A()+","+c.B()+")");}}publicclassB:A{publicnewvoidPrint(Cc){Console.WriteLine("B:C("+c.A()+","+c.B()+")

C# 私有(private)(隐藏)基类

是否可以使C#基类仅在其编译到的库程序集中可访问,同时使从它继承的其他子类公开?例如:usingSystem.IO;classBaseOutput:Stream//Hiddenbaseclass{protectedBaseOutput(Streamo){...}...lotsofcommonmethods...}publicclassMyOutput:BaseOutput//Publicsubclass{publicBaseOutput(Streamo):base(o){...}publicoverrideintWrite(intb){...}}在这里,我希望我的库的客户端无法访问Ba

c# - 装饰者模式的实现

尝试从“HeadFirstDesignPatterns”一书中的代码(用Java编写)在C#中实现装饰器模式。我刚开始使用C#,因此对语法还是陌生的,所以我不确定为什么我不能让下面的注释代码行工作。这是装饰器模式中的第一个抽象基类及其派生类:usingSystem;publicabstractclassBeverage{privateStringm_description;//getadescriptionofthebeveragepublicvirtualStringDescription{get{returnm_description;}}//calculatecostoftheb

c# - 如何从派生类中获取基类实例

我不知道这是否可行,但我正在尝试从派生类中获取基类实例。在C#中,我可以使用base关键字来访问基类的属性和方法(当然),但我想使用base本身。尝试这样做会导致“在此上下文中使用关键字‘base’无效”。示例代码publicclassSuperParent{publicintSPID;publicSuperParent(){}}publicclassSubChild:SuperParent{publicSubChild(intpSPID){base.SPID=pSPID;}publicintBaseSPID{get{SuperParentsp=base;returnsp.SPID;}

c# - 在基类中定义的 log4net 记录器

我想像这样在我的MVCController抽象基类中构建我的log4net记录器:protectedstaticreadonlyILogLog=LogManager.GetLogger(typeof(AuthorizedController));以这种方式,我可以一次定义记录器并完成它。唯一的问题是日志输出中的记录器属性将始终是AuthorizedController,如果我有FooController继承自AuthorizedController我想日志输出以反射(reflect)这一点。执行此操作的KISS、DRY和有效方法是什么? 最佳答案

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# 中的方法以及一个有效的例子。为什么在框架中实现?什么是现实世界的优势?

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