重写分部类中的抽象方法
本文关键字:抽象方法 重写 | 更新日期: 2023-09-27 18:29:14
我有一个名为PersonAbstract
的抽象类。它有一个名为Age
的抽象属性
abstract public int Age { get; set; }
Customer
和Employee
两个类扩展了PersonAbstract
。
Customer
和Employee
是使用Linq-to-SQL创建的,因此它们具有自动生成的代码。
这两者的自动生成代码:
public int Age
{
get
{
return this._age;
}
set
{
this._age = value;
}
}
我使用分部类为Employee
和Customer
添加功能。
public partial class Employee: PersonAbstract
{
.....
如何更改此结构,使继承的类(Employee
和Customer
)的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
}
}