Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从多个类继承成员_C#_Oop - Fatal编程技术网

C# 从多个类继承成员

C# 从多个类继承成员,c#,oop,C#,Oop,我一直在学习使用OOD进行设计,并坚持使用场景 我有一个类User,它扩展了一个抽象类Person。ClassPerson具有类型为Address的成员User只有用户名和密码,Address有一些字符串字段 现在,我想添加一个类客户机,它可以是个人或组织(待添加)客户端也会有一些数据 我考虑过接口,但它们只能有方法。谁能帮我找到合适的设计 我没有遵循任何模式,也没有使用C#NET进行编码 更新 我想我无法正确地解释这种情况。对不起。请看一下图表。在这里,我想添加的是Client类。 试着写作

我一直在学习使用OOD进行设计,并坚持使用场景

我有一个类
User
,它扩展了一个抽象类
Person
。Class
Person
具有类型为
Address
的成员
User
只有用户名和密码,
Address
有一些字符串字段

现在,我想添加一个类
客户机
,它可以是
个人
组织
(待添加)<代码>客户端也会有一些数据


我考虑过接口,但它们只能有方法。谁能帮我找到合适的设计

我没有遵循任何模式,也没有使用C#NET进行编码


更新 我想我无法正确地解释这种情况。对不起。请看一下图表。在这里,我想添加的是
Client
类。
试着写作文。个人和组织不一定是用户,尽管它们都可以有地址或用户帐户。实际上,他们很可能两者都有不止一个。
如果您更多地考虑HAS A而较少考虑IS A,那么您可以提出更多可维护的选择。 例如,你可以有一个

class Address {
  public string street {get; private set;}
  public string city {get; private set;}
  public AddressTypes AddressType {get; private set;} // an enum to differentiate 
                                                      // "home address", "legal address"
  ...
}
现在,如果您需要对
人员
组织
都必须具有
地址
的事实进行建模,您可以创建一个接口

interface IAddressable {
   IEnumerable<Address> {get;}
}
优点是:

  • 您不必更改现有代码以将角色(客户机)作为现有实体(个人、组织)的基类进行追溯
  • 如果您的公司开始将实例状态作为客户端,则可以添加
    StateClient
    ,而无需更改现有部分

“我考虑过接口,但它们只能有方法。”不,它们也可以有属性和事件。。。我还不完全清楚你们想建模什么……客户需要是用户吗?若客户机必须从用户继承,那个么将地址移动到用户,这样它也将拥有现在的地址。也许您应该将必须重写只读属性“UserType”添加到在子类中重写的用户类中。子类定义了它们是什么类型的用户类型。接口不仅限于方法,它们还可以具有getter setter和events属性。我更喜欢这里的接口,我想
组织
s也有
地址
。因此,也许
地址
应该在
客户
上,而
个人
组织
应该从
客户
中派生出来?从你的问题中,我无法选择一个应该从多个类继承的类感谢一个好的建议。我只为系统的用户添加了
User
类。他们不需要是
。但是他们可以有个人信息。
Person
是一个抽象类。我如何实例化它?@Raihan我不确定我是否理解你的问题,但如果它是抽象类,你需要一个从Person继承的具体类。当我想要获得所有客户端时,你的设计有问题。我必须调用
PersonClient.GetAll()
OrganizationClient.GetAll()
@Raihan我的代码只是一个例子。如果需要的话,可以将客户机设置为非抽象类。如果将来不打算扩展客户机的类型,您可以在客户机中使用枚举来指定客户机的类型,就像我在Address类中对AddressType所做的那样,而不是PersonClient和OrganizationClient子类
abstract class Client : IAddressable, IWithAccount {
   // implement IAddressable and IWithAccount
}

class PersonClient : Client
{
    public PersonClient(Person person)
    {
        // make the Client's address refer to the Person's address
        // make the Client's account refer to the Person's account
    }
}

class OrganizationClient : Client
{
    public OrganizationClient(Organization organization)
    {
        // make the Client's address refer to the Organization's address
        // make the Client's account refer to the Organization's account
    }
}