2012-01-11 15 views
6

परिभाषा आभासी गुण या तरीकों से उप वर्गों को दिखाई तरीकों ओवरराइड करने के लिए कर रहे हैं। लेकिन, उदाहरण के लिए NHibernate आलसी लोडिंग सुनिश्चित करने के लिए आभासी गुणों का उपयोग करता है।आभासी गुण और आलसी लोड हो रहा है

मेरा प्रश्न NHibernate के बारे में नहीं है, लेकिन कैसे आप आलसी लोड हो रहा है प्राप्त करने के लिए आभासी गुणों का उपयोग कर सकता है? क्या वर्चुअल गुणों के बारे में कोई छुपा व्यवहार है जो मुझे नहीं पता?

उत्तर

9

तथ्य यह है कि उन्हें वर्चुअल घोषित किया गया है, यह तथ्य एनएचबीर्नेट को संपत्ति को ओवरराइड करने और इसके लिए प्रॉक्सी कार्यान्वयन करने की अनुमति देता है - बदले में प्रॉक्सी वे संपत्ति की पहली पहुंच पर आलसी लोडिंग को लागू करने के लिए उपयोग कर सकते हैं।

+0

क्या निबर्ननेट आपकी कक्षा का उत्तराधिकारी है? –

+0

हां, यही कारण है कि इसे 'आभासी' की आवश्यकता है। इस तरह से डेटा को प्राप्त करने के लिए डेटा को लाने के लिए यह आपकी संपत्ति को कोड के साथ बदल सकता है। – ChrisAnnODell

+0

@ChrisAnnODell रनटाइम पर विरासत में कैसे प्राप्त किया जा सकता है? प्रतिबिंब –

2

virtual सदस्यों के पीछे कोई छिपा व्यवहार नहीं है। इतने छिपे हुए तथ्य को छोड़कर कि उन्हें बाल वर्गों में ओवरराइड किया जा सकता है।

लेज़ी लोड हो रहा है Lazy<T> वर्ग का उपयोग करके प्राप्त किया जा सकता है। जिसमें टी वह प्रकार है जिसे लोड किया जाएगा। यह निश्चित रूप से T में परिवर्तित हो जाएगा।

या आप कुछ इस तरह इस्तेमाल कर सकते हैं तो आप मैन्युअल आलसी व्यवहार करने के लिए सेट करने के लिए गुण चाहते हैं: उन्हें Nullable<T> बनाने के लिए

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

ValueTypes के साथ आप चुन सकते हैं। या bool पेश करें चाहे वे लोड हो या नहीं।

+0

क्या होगा यदि उसके पास आलसी तक पहुंच नहीं है? और वर्चुअल/ओवरराइड के साथ आलस्य कैसे प्राप्त कर सकता है? मुझे लगता है कि ओपी क्या मतलब था। – oleksii

+0

मैनुअल आलस्य। मुझे यह निर्दिष्ट करने दें। – Aidiakapi

संबंधित मुद्दे