重写分部类中的抽象方法

本文关键字:抽象方法 重写 | 更新日期: 2023-09-27 18:29:14

我有一个名为PersonAbstract的抽象类。它有一个名为Age 的抽象属性

abstract public int Age { get; set; }

CustomerEmployee两个类扩展了PersonAbstract

CustomerEmployee是使用Linq-to-SQL创建的,因此它们具有自动生成的代码。

这两者的自动生成代码:

public int Age
{
   get
   {
      return this._age;
   }
   set
   {
      this._age = value;
   }
}

我使用分部类为EmployeeCustomer添加功能。

public partial class Employee: PersonAbstract
{
.....

如何更改此结构,使继承的类(EmployeeCustomer)的person属性覆盖抽象类中的person特性,而不涉及自动生成的代码?

编辑:

问题是我想让两个类共享一些父类的代码。因此,我一直试图在具有Age属性的接口和两个子类之间添加具有共享代码的抽象类。但该代码需要访问Age属性。因此,抽象类必须使用Age属性的抽象实例来实现接口,并且子类将覆盖该接口。如果这是不可能的,我如何才能达到预期的结果?

重写分部类中的抽象方法

您不能-自动生成的代码没有使用override,因此它不能覆盖现有成员。

不过,如果您将age属性放入接口中,那么自动生成的代码将很乐意为您实现该接口。

我想进一步阐述我对Jon Skeet的回答的看法。从C#9开始,由于引入了源生成器,部分方法的规则已经放宽。这是我的用例。我有一个声明为abstract的方法,我想通过源代码生成器实现它,因为它的编写非常重复。

public class DomainEvent
{
    public int Version;
}
public abstract class Aggregate
{
    public abstract string Id { get; }
    
    // This is the method I want to automatically generate through a source generator
    protected abstract void Route(DomainEvent @event);
}

public partial class Inventory : Aggregate
{
    public override string Id => "42";
}
public partial class Inventory 
{
    protected override void Route(DomainEvent @event)
    {
        // Do something
    }
}