6

2 つの部分クラスで形成されたクラスがあります。

1 つは ORM コード生成によって作成され、もう 1 つは拡張用です。

この特定のインスタンスでは、最初に検証を行う必要があるため、部分クラスによって生成されたプロパティの 1 つをオーバーライドする必要があります。

拡張クラスを使用して、コード生成部分クラスのプロパティをオーバーライドすることはできますか?

4

1 に答える 1

10

いいえ、できません。あなたがコード生成の所有者である場合は、そのシナリオを処理するためのフックを配置する必要があります。たとえば、LinqToSql の sqlmetal.exe は、各プロパティ セッターが次のような部分クラスを生成します。

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();

このセットアップでは、拡張部分クラスのこれらのイベントを利用するのは明らかに非常に簡単です。

于 2010-10-01T02:19:04.830 に答える