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