【发布时间】:2020-06-26 16:37:40
【问题描述】:
我有一个密封的和公共的类对象在项目的许多类中使用。
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)
{
}
【问题讨论】:
-
C#只能有一个基类,所以其他的parenet需要是接口。
-
我认为正确的方法是使用 Custom 作为 NewClass 的字段
-
您是否打算将这个
NewClass的值替换为期望Customer和PageRequest值的现有代码?如果没有,你不应该使用继承;相反,您应该创建一个带有Customer属性和Page Request属性的NewClass。 (这被称为“优先组合而不是继承”,如果你想研究更多。) -
是的,我希望它被替换为现有代码
-
“继承自密封”
标签: c# class inheritance multiple-inheritance sealed-class