覆盖部分类中的抽象方法

时间:2012-03-28 20:05:39

标签: c# inheritance abstract-class partial-classes auto-generate

我有一个名为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属性的抽象实例来实现接口,子类重写它。如果这是不可能的,我还能如何达到预期的效果呢?

2 个答案:

答案 0 :(得分:5)

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

如果您将age属性放入界面,那么自动生成的代码将很乐意为您实现该界面。

答案 1 :(得分:1)

我想扩展我对 Jon Skeet 回答的评论。从 C# 9 开始,the rules for partial methods have been relaxed 因为引入了 source generators。这是我的用例。我有一个声明为 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
    }
}