2013-07-17 5 views
23

मान लें कि हमारे पास ICar जैसे साधारण इंटरफ़ेस हैं जब मैं आईकर अभिव्यक्ति पर माउस ले जाता हूं और Implement Interface पर क्लिक करता हूं विजुअल स्टूडियो नीचे कार्यान्वयन का उत्पादन करता है।मैं इंटरफ़ेस को कार्यान्वित करने के बजाय एक ऑटो प्रॉपर्टी का कार्यान्वयन कैसे कर सकता हूं?

क्या इंटरफ़ेस पर दिखाई देने वाली केवल एक ऑटो प्रॉपर्टी प्रदान करने का कोई तरीका है। यह कारण फिर से फैक्टरिंग मुद्दों और मुझे हर बार पागल बनाते हैं!

public interface ICar 
    { 
     double Power { get; set; } 
    } 

    public class Car:ICar 
    { 

     public double Power 
     { 
      get 
      { 
       throw new NotImplementedException(); 
      } 
      set 
      { 
       throw new NotImplementedException(); 
      } 
     } 
    } 
+0

आप "के लिए" स्वत: गुण से क्या मतलब है की है। क्या आपका मतलब * ऑटो-गुणों के बजाय है? '{मिल; सेट;} 'इंटरफ़ेस पर एक ऑटो-प्रॉपर्टी नहीं है। – CodesInChaos

+0

@CodesInChaos मैं कार्यान्वयन के लिए 'वर्ग' के लिए ऑटो प्रॉपर्टी की अपेक्षा करता हूं। मैं इंटरफ़ेस पर देखे गए '{get; set;}' की अपेक्षा करता हूं। जैसा कि वहां देखा गया है http://msdn.microsoft.com/en-us/library/bb384054.aspx। इसे इंगित करने के लिए धन्यवाद। –

+0

@CodesInChaos क्षमा करें मैंने हाल ही में प्रश्न का शीर्षक देखा। तुम सही हो। मैंने इसे बदल दिया है। –

उत्तर

27

जब आप Implement Interface पर क्लिक विजुअल स्टूडियो द्वारा उपयोग किए गए खाके को बदलने की जरूरत के साथ समाप्त होगा। टेम्पलेट निम्न स्थान में संग्रहीत किया जाता है:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC#\Snippets\1033\Refactoring 

आप को बदलने की जरूरत टेम्पलेट कहा जाता है PropertyStub.snippet

नोट: मैं परिवर्तन करने से पहले मौजूदा टुकड़ा फ़ाइल का बैकअप ताकि आप आसानी से बातें करता है, तो वापस कर सकते हैं होगा ठीक मत जाओ

लाइनों से आपको अवगत करवाने की जरूरत है:

$GetterAccessibility$ get 
{ 
    $end$throw new $Exception$(); 
} 
$SetterAccessibility$ set 
{ 
    throw new $Exception$(); 
} 

लाइनों इस को बदला जाना चाहिए:

$GetterAccessibility$ get; 
$SetterAccessibility$ set; 
+0

+1 यह नहीं पता था कि टेम्पलेट संचालित था। –

+1

@AdamHouldsworth - हाँ अगर आप 'रिफैक्टरिंग' फ़ोल्डर को देखना शुरू करते हैं तो यह आश्चर्यजनक है कि वीएस में संचालित टेम्पलेट कितना है। –

+0

हालांकि आपका टेम्पलेट थोड़ा सा दिखता है, मुझे नहीं लगता कि एक ऑटो-प्रॉपर्टी उत्पन्न होगी। –

5

सबसे पहले, यह एक ऑटो-प्रॉपर्टी नहीं है। आप एक स्वत: संपत्ति चाहते हैं, आप क्या संकलक उत्पादन को हटा दें और

public double Power { get; set; } 

एक स्वत: संपत्ति है से बदलने के लिए है।

संकलक ऐसा करता है क्योंकि यह सबसे आसान बात है कि संकलक ऐसा कर सकता है जो संकलित करेगा जो कोड उत्पन्न करेगा। मुझे लगता है कि यह इंटरफेस पर गुणों के लिए ऑटो-गुण कर सकता है लेकिन फिर यह विधियों को कैसे संभालता है (यह भीNotImplementedException विधि स्टब्स) और गुणों के बीच एक असंगतता प्रस्तुत करता है। उसने कहा, आप इसे बदल सकते हैं। यह स्निपेट में संभाला है:

1) के टुकड़े निर्देशिका खोलें और इस फाइल को C:\Program Files\Microsoft Visual Studio 10.0\VC#\Snippets\1033\Refactoring\PropertyStub.snippet

2) PropertyStub.snippet फ़ाइल को संशोधित मिल जाए,

<![CDATA[$signature$ { $GetterAccessibility$ get; $SetterAccessibility$ set; }]]> 

आप भी ऐसा कर सकते के साथ संपत्ति स्टब्स की जगह MethodStub.snippet के लिए ताकि यह खाली शरीर का उत्पादन करे।

अब, जब आप दृश्य स्टूडियो का उपयोग कर एक इंटरफेस ऑटो लागू, आप

public double Power { get; set; } 
+2

क्या आप जानते हैं कि वीएस 2015 के लिए यह काम कैसे करें? –

+0

हाँ, यह मेरे लिए वीएस 2015 के लिए काम नहीं करता है। – garfbradaz

2

तो लोगों को खोज में आते हैं इस दृश्य स्टूडियो 2015 की संभव नहीं है करने के लिए कोशिश कर रहा है रिफैक्टरिंग स्निपेट को संशोधित करने के लिए। Roslyn के अपडेट के बाद ऐसा लगता है कि विजुअल स्टूडियो वास्तव में उन स्निपेट फ़ाइलों को वास्तव में संदर्भित नहीं करता है और यह सीधे रोज़लिन में करता है।

5

आप विकल्पों में इसे बदल सकते हैं: उपकरण> विकल्प> पाठ संपादक> सी #> उन्नत और तल पर आप

t

+0

यह स्वीकार्य उत्तर होना चाहिए। –

+0

यह बिल्कुल स्वीकार्य उत्तर होना चाहिए। –

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

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