2011-10-22 7 views
5

मान लें कि हमारे पास 3-स्तरीय ऐप है और पी 1, पी 2, पी 3 नामक तीन परियोजनाएं हैं।सी # संदर्भ निर्भरता वीबी के लिए अलग हैं?

निर्भरता: पी 1 (डेटा) < < P2 (व्यापार तर्क) < < पी 3 (प्रस्तुति)

P2 एक आधार वर्ग एक्स कि वाई एक अन्य वर्ग में विरासत में मिला था P2 में मिल गया है । तो, हम पी 2 को रेफरी पी 1 जोड़ते हैं। हालांकि, पी 3 पी 2 का उपयोग करता है। वाई और पी 1 का उपयोग नहीं करता है। एक्स सीधे।

ऐसा करने के लिए हमें पी 3 में रेफरी पी 2 जोड़ना होगा। लेकिन वीबी और सी # के बीच अंतर है।

वीबी में, हम केवल पी 3 में रेफ पी 2 जोड़ते हैं। पी 2 पी 1 का उपयोग करता है लेकिन यह पी 3 के लिए महत्वपूर्ण नहीं है। हम को P3 पर रेफरी पी 1 जोड़ने की आवश्यकता नहीं है। यह काफी है!

लेकिन, में सी #, हम पी 3 को रेफरी P1 और P2 दोनों को जोड़ने के लिए भले ही पी 3 P1.X का उपयोग नहीं करता है। यदि आप रेफरी ए को सी नहीं जोड़ते हैं तो आपको नीचे त्रुटि मिलती है:

प्रकार 'P1.X' को उस असेंबली में परिभाषित किया गया है जिसका संदर्भ नहीं दिया गया है। आपको असेंबली 'पी 1, संस्करण = 1.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = null' का संदर्भ जोड़ना होगा।

हमें सी # में दो परियोजनाओं को क्यों जोड़ना चाहिए?

या, इसके बजाय, क्या हम इस व्यवहार को अवरुद्ध कर सकते हैं?

उत्तर

1

एक संभावित कारण यह है कि पी 2 सार्वजनिक रूप से सदस्यों को उजागर करता है जिनके प्रकार पी 1 में परिभाषित किए जाते हैं। उस स्थिति में पी 1 को पी 3 में भी संदर्भित किया जाना चाहिए, भले ही आप इसे पी 3 में स्पष्ट रूप से उपयोग न करें।

उदाहरण:

// Assembly P1 
public class C1 
{ 
    ... 
} 

// Assembly P2 
public class C2 
{ 
    public string Foo { get; set; } 
    public C1 Bar { get; set; } 
} 

// Assembly P3 
void Main() 
{ 
    C2 c = ... 
    Console.WriteLine(c.Foo); 
} 

उपरोक्त कोड में, पी 3 सी 2 (P2 में परिभाषित) का उपयोग करता है, और सी 2 प्रकार सी 1 (P1 में परिभाषित) के एक सदस्य को उजागर करता है, तो पी 3 पी 1 (भले ही संदर्भ होना चाहिए यह C2.Bar का उपयोग नहीं करता है)


संपादित करें: वास्तव में मैं गलत था: आप P1 संदर्भ केवल यदि आप संदर्भ करते C2.Bar चाहिए ... व्यवहार सी # में के रूप में VB में बिल्कुल वैसा ही, मैं सिर्फ कोशिश की है (यदि आप नहीं जोड़ते हैं पी 1 के संदर्भ में आपको this error मिलते हैं)। यदि आपके पास पहले वीबी परियोजनाओं में यह बाधा नहीं थी, तो यह केवल इसलिए है क्योंकि पी 3 पी 1 पर निर्भर कुछ भी नहीं कर रहा था।

+0

क्या यह वीबी.नेट/सी # भेद की व्याख्या करता है? –

+0

@ किर्क, नहीं, यह नहीं है ... –

+1

हां, जैसा कि आपने कहा था कि हमें सी # में पी 3 को पी 1 रेफरी जोड़नी है। लेकिन हमें इसे वीबी में जोड़ने की ज़रूरत नहीं है। यह सवाल मैंने पूछा है ... –

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