2015-11-11 6 views
11

उदाहरण के सदस्यों का उपयोग करते समय मैं हमेशा अपने कोड के साथ स्पष्ट हूं, उन्हें this. और स्थिर सदस्यों के साथ उपसर्ग कर रहा हूं, उन्हें टाइप नाम के साथ उपसर्ग कर रहा हूं।रोज़लिन कोड विश्लेषक - मुझे "यह" कब उपयोग करना चाहिए?

रोसलिन यह पसंद नहीं लगता है, और विनम्रता से पता चलता है कि आप अपने कोड जहां उपयुक्त हो ...

... इसलिए मैं कहाँ इस करना होगा से this. और Type. छोड़ सकते हैं। .. (कोई यमक इरादा)

public void DoSomethingCool() 
{ 
    this.CallAwesomeMethod(); 
    CoolCucumber.DoSomethingLessAewsome(); 
} 

... Roslyn मैं यह कर पता चलता है ...

public void DoSomethingCool() 
{ 
    CallAwesomeMethod(); 
    DoSomethingLessAwesome(); 
} 

... लेकिन जब यह विस्तार तरीकों का उपयोग कर के लिए आता है, यह प्रतीत होता है कि मैं उदाहरण के लिए this. के उपयोग को छोड़ नहीं सकते हैं ...

public int GetTotal() 
{ 
    // This doesn't work  
    return Sum(o => o.Value); 

    // This does 
    return this.Sum(o => o.Value); 
} 

सवाल:

  1. रोज़लिन को this. और Type. का स्पष्ट उपयोग क्यों नहीं लगता है?
  2. विस्तार विधियों के लिए मुझे this. का स्पष्ट रूप से उपयोग करने की आवश्यकता क्यों है?
  3. जबकि इस सवाल का सख्ती से हिस्सा नहीं है, मैं रोज़लिन के बीच विसंगति को कैसे हल करूं, मुझे this. और Type. और स्टाइलकॉप के विश्लेषकों का उपयोग करने का आग्रह नहीं करना चाहिए कि मैं उनका उपयोग करता हूं?
+2

रोज़लिन सिर्फ मस्तिष्क-मृत है जो आपको इसका उपयोग करने के लिए पसंद नहीं करता है। मुझे लगता है कि रोज़लिन टीम के सदस्यों को इंटेलिसेन्स, स्मार्ट प्रोग्रामर की आवश्यकता नहीं है। लेकिन उत्पाद की गुणवत्ता को देखते हुए, शायद उन्हें थोड़ा और इस्तेमाल करना चाहिए था। लाइटबुल को ट्यून-आउट करने के बारे में जानना आपके ऊपर है, हम आपकी मदद नहीं कर सकते हैं। Fwiw, किसी और को सो गया था जब उन्होंने एक अंधेरे रंग योजना के लिए एक उज्ज्वल पृष्ठभूमि के साथ एक आइकन उठाया। फिट और खत्म सादा अपर्याप्त है, इसमें समय लगेगा। –

+3

@ हंसपैसेंट: यह चेक विकल्प में आसानी से अक्षम किया जा सकता है। – SLaks

+0

@SLaks मैं अपने प्रोजेक्ट जो एक परियोजना के लिए रोसलिन और StyleCop सभी नियमों का निहित में एक .ruleset फ़ाइल देखा: मैं नहीं बल्कि रोसलिन – series0ne

उत्तर

7

आप इस व्यवहार पर सही हैं। विजुअल स्टूडियो 2015 का उपयोग करते समय उसने मुझे भी मारा है और मैंने वही किया जैसा आपने किया था। यहाँ इस पर मेरे विचार कर रहे हैं:

  1. क्यों रोसलिन this. और Type. की स्पष्ट उपयोग की तरह प्रतीत नहीं होता है?

    यह ओवरहेड है, और ऐसा लगता है कि यह आवश्यक कोड को कम करना चाहता है। हालांकि मैं अपने कोड में स्पष्ट होना पसंद करता हूं। बाकी कोड को जानने के बिना एक चर के दायरे को समझना बहुत आसान है। (शायद यह भी एक विपणन रणनीति हमें कोड विश्लेषक के बारे में बताना है ... या मैं बहुत ज्यादा सोच रहा हूँ)

  2. क्यों मैं विस्तार तरीकों के लिए स्पष्ट रूप से this. उपयोग करने के लिए की जरूरत है?

    मुझे लगता है कि इस नियम विस्तार विधि, this के पहले पैरामीटर आपूर्ति है। this उपलब्ध कराने के बिना यह संदर्भ पर विधि कॉल करने नहीं जानता है। असल में, विस्तार विधि this.Sum(x => x) वास्तव में Enumerable.Sum(this, x => x) के रूप में पुनः लिखा गया है। this के लिए 'आवश्यकता' देखें? मैं छोड़ते हुए लगता है कि यह तकनीकी रूप से संभव है, लेकिन मैं इस मामले में भी स्पष्ट होना पसंद करते हैं और मुझे खुशी है कि संकलक भी करता हूँ।

1

this. एक वाक्य रचना कि संकल्प अस्पष्टता सी # में प्रदान की जाती है।उदाहरण के लिए:

class Square 
{ 
    private int size; 

    public Square(int size) 
    { 
     size = size;  // How do we differentiate member and parameter? 
    } 
} 

तो this. का उपयोग कर, क्योंकि यह एक की वजह से एक समस्या को हल करने की है, स्पष्ट बल्कि एक विरोधाभास है होने की मुखरता के की कमी है।

'सर्वोत्तम अभ्यास' मैं अनुशंसा करता हूं कि कोड लिखना है जो पहले स्थान पर संदिग्ध नहीं है, इस प्रकार this. का उपयोग करने की आवश्यकता को समाप्त कर रहा है। अस्पष्टता न केवल संकलक द्वारा नापसंद है बल्कि यह आपके प्रोग्राम को पढ़ने की कोशिश कर रहे अन्य प्रोग्रामर के लिए बेहद भ्रमित हो सकता है।

असंबद्धता प्राप्त करने के लिए हमें सदस्य चर और पैरामीटर जैसी चीजों के लिए अलग-अलग नामों का उपयोग करने की आवश्यकता है। सबसे आम दृष्टिकोण (this. के अलावा) सदस्यों की पहचान करने के लिए नामकरण उपसर्ग का उपयोग करना है। कई प्रोग्रामर उपसर्गों नापसंद लेकिन यह आम तौर पर, क्योंकि वे कभी नहीं देखा है है/एक अच्छी तरह से डिजाइन उपसर्ग प्रणाली का इस्तेमाल किया - मैं अपने दृष्टिकोण here का वर्णन किया है, और एक बार आप इसकी आदत हो, यह अपने आप के लिए उपयोगी जानकारी संवाद का एक बहुत शक्तिशाली तरीका है और आपके साथियों और अस्पष्टता और मिश्रणों के कारण कई सामान्य प्रकार की बग को खत्म कर देते हैं।

+0

मैं आपके लिंक किए गए दृष्टिकोण को पसंद करता हूं। एक बात हालांकि, सदस्य स्तर सूचक के लिए आप क्या करते हैं? mpTarget या pmTarget? क्या आपके पास 'स्टैक' उपसर्ग के लिए पसंदीदा 'पैटर्न' है? – user5151179

+0

धन्यवाद! मैं अपने पारंपरिक आदेश "विशेष संशोधक" के लिए (सदस्य/स्थिर/अस्थिर) और फिर "उपयोग की जानकारी" (सूचक, घटना) है, जो "mp" आदेश में जो परिणाम पर निर्भर करता है लगता है। के रूप में स्थिर/अस्थिर/घटना आमतौर पर सदस्य हैं मैं, "एस" नहीं बल्कि "एमएस" की तुलना में उपयोग करने के लिए चीजों क्लीनर रखने के लिए करते हैं तो मेरे लिए यह केवल C/C++ में आमतौर पर है (जहां उपसर्गों "mp" या "पीपी" फसल तक) कि वे 1 से अधिक चरित्र लंबे समय तक खत्म हो जाते हैं। –

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