当前位置: 首页 > 知识库问答 >
问题:

如何创建同时从密封类和公共类继承的类

淳于亦
2023-03-14

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

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中删除sealed可能不是一个好主意,因为它已被许多应用程序领域使用,即使我不能同时将Customer和PageRequest作为基类。如果有更好的方法,我可以更改现有客户类别

public class NewClass : PageRequest
{

}

重复下面新类中的属性是不是更好?

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 get请求查询字符串的一部分,其中用户必须提供一个或多个(firstname、lastname、address)和currentpage、perpage、sortby作为输入参数,需要一种更好的方法来将所有参数与请求匹配。我想将这个类用作get请求(http://someendpoint

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

}

共有1个答案

殷德本
2023-03-14
匿名用户

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

你可以这样使用合成:

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

因此,当创建< code>NewClass实例时,将创建< code>Customer实例,并且该实例将一直存在,直到被销毁。

如果需要,您还可以添加一些包装方法,并将< code>Customer标记为private,例如:

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# 代码

 类似资料:
  • 本文向大家介绍说一下类的创建和继承?相关面试题,主要包含被问及说一下类的创建和继承?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: (1)类的创建(es5):new一个function,在这个function的prototype里面增加属性和方法。 下面来创建一个Animal类: 这样就生成了一个Animal类,实力化生成对象后,有方法和属性。 (2)类的继承——原型链继承 --原型链继承

  • 问题内容: 在PHP / Java中,可以做到: 并且,Super类的所有公共/受保护的方法,属性,字段等都会自动成为Sub类的一部分,如有必要,可以重写这些类。 Javascript中的等效功能是什么? 问题答案: 我已经更改了现在的操作方式,我尝试避免使用构造函数和它们的属性,但是我从2010年起的旧答案仍然是最底层的。我现在更喜欢。适用于所有现代浏览器。 我应该注意,这通常比使用函数构造函数

  • 在面向对象的程序设计中,定义一个新的 class 的时候,可以从某个现有的 class 继承,新的 class 称为子类,而被继承的 class 称为基类、父类或超类。 Python 中继承的语法如下: class Parent: pass class Child(Parent): pass 在第 1 行,定义了父类 Parent; 在第 4 行,定义了子类 Child,语法

  • 问题内容: 我正在使用JAXB读写XML。我想要的是使用基本JAXB类进行编组,并使用继承的JAXB类进行编组。这是允许发送方Java应用程序将XML发送到另一个接收方Java应用程序。发送者和接收者将共享一个公共的JAXB库。我希望接收者将XML解组为接收者特定的JAXB类,该类扩展了通用JAXB类。 例: 这是发送方使用的常见JAXB类。 这是在解组XML时使用的特定于接收者的JAXB类。接收

  • 我正在自己学习swift,但我无法让这个代码运行,我正在尝试创建一个类“Inhabitant”,它继承了Person类的一个新的“Country”属性,有两个初始值设定项:-一个接受firstname和lastname,并将Country设置为空String-一个接收firstname,lastname和country,并创建String类型的计算属性描述,该描述返回由空格分隔的名字、姓氏和国家

  • 本文向大家介绍Java继承Thread类创建线程类示例,包括了Java继承Thread类创建线程类示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java继承Thread类创建线程类。分享给大家供大家参考,具体如下: 一 点睛 通过继承Thread类创建线程并启动多线程的步骤: 1 定义Thread的子类,并重写该类的run()方法,该run()方法的方法体代表了线程需要完成的任务。因