1

我在项目的许多类中使用了一个密封的和公共的类对象。

public sealed class Customer {

public int Id{get; set;}
public string FirstName {get; set;}
public string LastName {get; set;}
public string MiddleName {get; set;}
public string Address {get; set;}

}

public class PageRequest
{
     public int CurrentPage {get; set;}
     public int PerPage {get; set;}
     public string SortBy {get; set;}
}

我需要创建一个新的类对象,其中包含两个类中组合的所有属性,而不是重复所有属性。以下可以将 pagerequest 属性引入新类,但我如何设法获取 Customer 类的属性。我不能继承 Customer 的属性,因为它是一个密封类。从 Customer 中删除 seal 可能不是一个好主意,因为它已被许多应用程序领域使用,即使这样我也不能同时将 Customer 和 PageRequest 作为基类。如果有更好的方法,我可以更改现有的 Customer 类

public class NewClass : PageRequest
{

}

像下面这样重复 NewClass 中的属性是否更好?

public class NewClass : PageRequest
    {
        public int Id{get; set;}
    public string FirstName {get; set;}
    public string LastName {get; set;}
    public string MiddleName {get; set;}
    public string Address {get; set;}
    }

这个新的类对象将用作新 api 获取请求查询字符串的一部分,其中用户必须提供一个或多个(名字、姓氏、地址)和 currentpage、perpage、sortby 作为输入参数,需要更好的方法来适应所有请求的参数。我想使用这个类作为获取请求(http://someendpoint&firstname=a&lastname=b&currentpage=1&perpage=10

public Task<PaginatedResult<SomeDto>> GetResult([FromQuery]NewClass request) 
{

}
4

1 回答 1

2

C#中没有多重继承,一个类是密封的......

您可以使用这样的组合

public class NewClass : PageRequest
{
  public Customer Customer { get; private set; }
  public NewClass()
  {
    Customer = new Customer();
  }
}

因此,Customer实例是在创建NewClass实例时创建的,并将一直存在到其销毁。

如果需要,您还可以添加一些包装方法Customer,并将其标记为私有,例如:

public class NewClass : PageRequest
{
  private readonly Customer Customer = new Customer();
  public string FirstName
  {
    get { return Customer.FirstName; }
    set { Customer.FirstName = value; }
  }
  public NewClass()
  {
  }
}

如果有两个或多个密封类,或者您根本不想使用继承,您可以对所有工件执行相​​同的操作:

public class NewClass
{
  private readonly Customer Customer = new Customer();
  private readonly PageRequest PageRequest = new PageRequest();
}

组合和聚合的区别@ C# Cormer

关联,聚合和组合之间有什么区别?

用于关联、聚合、组合的 C# 代码

于 2020-06-26T17:10:40.127 回答