仮想プロパティまたはメソッドは、オーバーライドするサブクラスで表示可能なメソッドです。しかし、例えば、NHibernateは遅延プロパティを保証するために仮想プロパティを使用します。仮想プロパティと遅延ロード
私の質問はNHibernateについてではありませんが、どうやってレイジーロードを達成するために仮想プロパティを使うことができますか?私が知らないバーチャルプロパティに関する隠された振る舞いはありますか?
仮想プロパティまたはメソッドは、オーバーライドするサブクラスで表示可能なメソッドです。しかし、例えば、NHibernateは遅延プロパティを保証するために仮想プロパティを使用します。仮想プロパティと遅延ロード
私の質問はNHibernateについてではありませんが、どうやってレイジーロードを達成するために仮想プロパティを使うことができますか?私が知らないバーチャルプロパティに関する隠された振る舞いはありますか?
これらが仮想として宣言されていることから、NHibernateはプロパティをオーバーライドしてプロキシの実装を作成することができます。プロキシは、プロパティの最初のアクセス時に遅延ロードを実装するために使用できます。
virtual
のメンバーの何も目に触れていません。それほど隠されていないという事実を除いて、それらは子クラスでオーバーライドすることができます。
レイジーローディングは、Lazy<T>
クラスを使用することによって達成できます。ここで、Tはロードされる型です。暗黙のうちにT
に変換されます。
それとも、手動で怠惰な動作するようにプロパティを設定したい場合は、このような使用することができますそれらNullable<T>
作るために
private SomeType _someProperty = null;
public override SomeType SomeProperty
{
get
{
if (_someProperty == null)
{
// Load _someProperty
}
return _someProperty;
}
}
値型であなたが選ぶことができます。または、それらがロードされているかどうかにかかわらず、bool
を導入してください。
Nhibernateはあなたのクラスを継承しますか? –
はい、そのために 'virtual'が必要です。これにより、アクセス時にデータをフェッチするためのコードでプロパティを置き換えることができます。 – ChrisAnnODell
@ChrisAnnODellランタイムで継承することでクラスを継承する方法を教えてください。 –