我有一个由两个部分类组成的类。
由ORM代码生成创建,一个用于扩展。
在这个特定的实例中,我需要覆盖partial类生成的一个属性,因为我需要先对它进行一些验证。
是否可以使用我的扩展类来覆盖代码生成分部类的属性?
答案 0 :(得分:10)
不,不可能。如果您是代码生成的所有者,则应该放置钩子来处理该场景。例如,LinqToSql的sqlmetal.exe生成部分类,其中每个属性setter看起来有点像这样:
if (this.myProperty != value)
{
this.OnMyPropertyChanging(value);
this.SendPropertyChanging();
this.myProperty = value;
this.SendPropertyChanged("MyProperty");
this.OnMyPropertyChanged();
}
当然,生成器还会创建特定于属性的更改/更改方法,但是它们将这些方法声明为部分:
partial void OnMyPropertyChanging(string newValue);
partial void OnMyPropertyChanged();
使用此设置,显然很容易为扩展分部类点击这些事件。