2012-01-11 11 views
6

geçersiz alt sınıflara görebilir yöntemlerdir. Ancak, NHibernate örneğin tembel yükleme sağlamak için sanal özellikleri kullanır.sanal özellikleri ve geç yükleme tanımı sanal özellikleri veya yöntemler ile

Sorum NHibernate ilgili değil, ama tembel yüklemesine ulaşmak için sanal özelliklerini kullanabilirsiniz nasıl? Bilmediğim sanal özelliklerle ilgili gizli davranış var mı? onlar mülkiyetin ilk erişim tembel yükleme uygulamak için kullanabileceğiniz sırayla vekil -

cevap

9

onlar sanal ilan edilir olması NHibernate özelliği geçersiz kılmak ve bunun için bir vekil uygulamasını oluşturmanıza olanak sağlar.

+0

Nhibernate sınıfınızı miras alıyor? –

+0

Evet, bu yüzden 'sanal' ihtiyacı var. Bu şekilde, erişildiğinde verilerinizi almak için mülkünüzü kodla değiştirebilirsiniz. ? Bu sadece bir vekil uygulaması olmasına rağmen, bir sınıf çalışma zamanında kalıtsal tarafından nasıl – ChrisAnnODell

+0

@ChrisAnnODell, yansıma O IL tükürme ile bunu yapmak görünüyor –

2

virtual üyeleri arkasında hiçbir gizli davranış yoktur. Çocuk sınıflarında geçersiz kılınabilecek kadar gizli bir gerçek dışında.

Geç yükleme Lazy<T> sınıfı kullanılarak elde edilebilir. Hangi T yüklenecek tiptir. Kesin olarak T'a dönüştürülür.

Ya elle tembel davranmak özelliklerini belirlemek istiyorsanız böyle bir şey kullanabilirsiniz: onları Nullable<T> yapmak

private SomeType _someProperty = null; 
public override SomeType SomeProperty 
{ 
    get 
    { 
     if (_someProperty == null) 
     { 
      // Load _someProperty 
     } 
     return _someProperty; 
    } 
} 

ValueTypes ile seçebilirsiniz. Ya da yüklenip yüklenmediklerini bir bool tanıtın.

+0

ne Lazy erişimi yoksa? Ve nasıl bir sanallık/geçersiz kılma ile tembelliğe ulaşabilir? Bence OP'nin anlamı bu. – oleksii

+0

Manuel tembellik. Bunu belirtmeme izin ver. – Aidiakapi