2010-04-28 18 views
5

वहाँ निम्नलिखित sytax का उपयोग कर के लिए किसी भी ओवरहेड्स हैं:सी # ऑब्जेक्ट घोषणाएं

Form1 myForm; 
myForm = new Form1(); 
myForm.Show(); 

जब मैं VB6 तैयार कर रही थी, मैं quivelent कर VB में एक था कहा गया था:

Form1 myForm = new Form1(); 
myForm.Show(); 

के रूप में करने का विरोध किया ओवरहेड - .NET में एक ही सच है?

उत्तर

5

.Net में कोई अंतर नहीं है।

लेकिन वीबी 6 As New में बुरा था। इसमें special meaning था: यह एक ऑटो-इंस्टॉलेशन वैरिएबल बना। इन चर के साथ आप कभी भी शून्य संदर्भ अपवाद नहीं प्राप्त कर सकते हैं। वीबी 6 रनटाइम स्वचालित रूप से आपके लिए ऑब्जेक्ट का एक नया उदाहरण बना देगा।

Dim x As New Foo 
x.Bar = 10  ' creates a new Foo ' 
Set x = Nothing ' destroys the first Foo' 
x.Bar = 20  ' NO ERROR - creates a second Foo ' 

यह व्यवहार considered evil सबसे सही सोच प्रोग्रामर द्वारा किया गया था: और हम प्लेग की तरह As New से बचते रहे।

लेकिन VB.Net (और सी #) में वहाँ Dim x As New Foo और Dim x As Foo: Set x = New Foo

0

मुझे संदेह है कि वहां है, लेकिन यदि वहां भी था, तो प्रदर्शन ओवरहेड इतना नगण्य होगा कि दूसरे पर एक चुनकर कोई लाभकारी लाभ नहीं होगा।

1

आपने बाद के मामले में तत्कालता से घोषणा को अलग कर दिया है। इसका कोई महत्वपूर्ण प्रभाव नहीं है। मैंने कहीं पढ़ा है कि .NET ऑब्जेक्ट इंस्टेंटेशन में 0.000007 सेकेंड लगते हैं, इसलिए यह शायद ही मायने रखता है, हालांकि अनुशंसित अभ्यास केवल ऑब्जेक्ट को तत्काल करने के लिए होगा जब आवश्यक हो या जब आवश्यक हो या कैशिंग की आवश्यकता न हो ..

+3

के बीच कोई अंतर अच्छी तरह से नहीं ठीक है - आप उच्च दायरे में एक वस्तु घोषित करने और दृष्टांत या निपटान के कुछ घटनाओं पर ऑब्जेक्ट के लिए चाहते हो सकता है। मेरे ऐप में, मैं प्रोप-ग्रिड विंडो ऑब्जेक्ट का संदर्भ रखता हूं जो केवल तभी तत्काल होता है जब उपयोगकर्ता प्रोप-ग्रिड देखना चाहता है। मैं प्रोप-ग्रिड ऑब्जेक्ट को प्रोप-ग्रिड फॉर्म की करीबी घटना पर निपटान करता हूं। –

+0

मैं इस से सहमत हूं ._courious_geek। +1 –

2

रिलीज मोड में संकलन करते समय बाइटकोड का परिणाम (और शायद डीबग मोड) वही होगा।

0

इस उदाहरण में आप एक चर [myForm] प्रकार फॉर्म 1 बनाते हैं और सृजन पर इसे स्मृति आवंटित करते हैं।

Form1 myForm = new Form1(); 

इस उदाहरण में पहली पंक्ति प्रकार Form1 के एक चर बनाता है, लेकिन कोई स्मृति इस MyForm वस्तु के लिए आवंटित किया गया है।

Form1 myForm; 

तब दूसरी पंक्ति इस्तेमाल किया जा सकता है जब भी आप प्रकार Form1 का एक नया उदाहरण की जरूरत है [उस बिंदु पर, स्मृति MyForm वस्तु के लिए आवंटित किया जाएगा]।

myForm = new Form1(); 

मेरी राय में, यह वास्तव में वहाँ प्रकार के अपने चर के सभी घोषित करने के लिए और फिर आप क्या कर सकते हैं जब आप एक जीवित उदाहरण की जरूरत है एक अच्छा अभ्यास है आपके ... obj = नए Foo1();

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