c# – 多重继承?

前端之家收集整理的这篇文章主要介绍了c# – 多重继承?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经看了一下可以帮助我解决令我困惑的设计问题的信息.我是新来的复杂的继承情况,所以我的解决方案实际上可以植根于一个更好的设计.但是,为了弄清楚我的设计应该是什么,我一直在想,我真的只需要继承一个以上的基础类.

我的具体案例涉及资产和不同类型的资产.

从资产开始…

每个PhysicalDevice都是资产
每个VirtualDevice都是资产
每个服务器都是资产

每个PhysicalServer都需要同时具备PhysicalDevice和Server
每个VirtualServer都需要是VirtualDevice和Server
每个NetDevice都是一个PhysicalDevice
每个StorageArray都是一个PhysicalDevice

我想的一个解决方案是复制两个PhysicalServers和VirtualServers的服务器代码,但是,我觉得这是反对我试图做的,这是继承.

它们需要是单独的类,因为每个类都具有属性方法.例如,Server将具有OSCaption,Memory,Procs等.PhysicalDevice将具有位置,串行,供应商等等,VirtualDevice将具有ParentDevice,State,VHDLocation等.

如果继承是衬垫,那么我遇到无法准确描述这些类型的问题.

有趣的是接口.似乎我可以将所有基类定义为接口,并根据需要在我的主类中实现它们.但是,如果我这样做,我根本就不确定这个含义是什么.

例如,像…的物理服务器:IAsset:IServer:IPhysical

我在深水中,所以我真的只是寻找建议或指导.

解决方法

接口是确保各种类型之间的合同完整性的适当方式,但是可能会导致每个实现的重复代码.

您的情景可能更适合组合而不是继承(或其组合).

示例 – 继承组合

  1. public class PhysicalServer : Asset
  2. {
  3. public PhysicalInfo PhysicalProperties
  4. {
  5. get;
  6. set;
  7. }
  8. }
  9.  
  10. public class VirtualServer : Asset
  11. {
  12. public VirtualInfo VirtualProperties
  13. {
  14. get;
  15. set;
  16. }
  17. }

示例 – 仅组合

  1. public class VirtualServer
  2. {
  3. public VirtualInfo VirtualProperties
  4. {
  5. get;
  6. set;
  7. }
  8.  
  9. public AssetInfo AssetProperties
  10. {
  11. get;
  12. set;
  13. }
  14. }

然后,您可以在混合中添加多态/泛型,并创建类型的衍生物来表示更具体的需求.

示例 – 继承组合从通用类型继承的通用成员

  1. public class VirtualServer<TVirtualInfo> : Asset
  2. where TVirtualInfo : VirtualDeviceInfo
  3. {
  4. public TVirtualInfo VirtualProperties
  5. {
  6. get;
  7. set;
  8. }
  9. }
  10.  
  11. public class VirtualServerInfo : VirtualDeviceInfo
  12. {
  13. // properties which are specific to virtual servers,not just devices
  14. }

有无数的方法可以建模,但配备接口,组合,继承和泛型,你可以想出一个有效的数据模型.

猜你在找的C#相关文章