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

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

解决方法

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

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

示例 – 继承组合

public class PhysicalServer : Asset
{
    public PhysicalInfo PhysicalProperties
    {
         get;
         set;
    }
}

public class VirtualServer : Asset
{
    public VirtualInfo VirtualProperties
    {
         get;
         set;
    }
}

示例 – 仅组合

public class VirtualServer
{
    public VirtualInfo VirtualProperties
    {
         get;
         set;
    }

    public AssetInfo AssetProperties
    {
         get;
         set;
    }
}

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

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

public class VirtualServer<TVirtualInfo> : Asset
   where TVirtualInfo : VirtualDeviceInfo
{
    public TVirtualInfo VirtualProperties
    {
         get;
         set;
    }
}

public class VirtualServerInfo : VirtualDeviceInfo
{
   // properties which are specific to virtual servers,not just devices
}

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

原文链接:https://www.f2er.com/csharp/93641.html

猜你在找的C#相关文章