我有一个由两个部分类组成的类。
一个是ORM代码生成创建的,另一个是扩展用的。
在这种特定情况下,我需要覆盖部分类生成的某个属性,因为我需要先对其进行一些验证。
是否可以使用我的扩展类来覆盖代码生成部分类的属性?
我有一个由两个部分类组成的类。
一个是ORM代码生成创建的,另一个是扩展用的。
在这种特定情况下,我需要覆盖部分类生成的某个属性,因为我需要先对其进行一些验证。
是否可以使用我的扩展类来覆盖代码生成部分类的属性?
不,这是不可能的。如果您是代码生成的所有者,应该为处理这种情况放置钩子。例如,用于 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();
有了这个设置,很明显可以轻松地利用这些事件来扩展部分类。