2009-06-09 4 views
6

मुझे यकीन है कि उत्तर कुछ स्पष्ट है, और मैं शर्मिंदा हूं कि मुझे वास्तव में पहले से ही जवाब नहीं पता है, लेकिन "व्यावसायिक एएसपी.नेट एमवीसी 1.0" पढ़ने के दौरान मैंने उठाए गए निम्नलिखित कोड नमूने पर विचार किया है:विधि पैरामीटर के लिए उपसर्ग के रूप में उपयोग किए जाने पर "यह" क्या मतलब है?

public static class ControllerHelpers 
{ 
    public static void AddRuleViolations(this ModelStateDictionary modelState, IEnumerable<RuleViolation> errors) 
    { 
     foreach (RuleViolation issue in errors) 
      modelState.AddModelError(issue.PropertyName, issue.ErrorMessage); 
    } 
} 

मैं समझता हूँ कि इस स्थिर विधि क्या कर रहा है, लेकिन क्या मुझे समझ नहीं आता क्या प्रयोजन शब्द "इस" विधि हस्ताक्षर में सेवारत है है। क्या कोई मुझे प्रबुद्ध कर सकता है?

उत्तर

17

यह एक नई सी # 3.0 सुविधा है जिसे extension method कहा जाता है।

इसका मतलब है कि आप अपने ModelStateDictionary ऑब्जेक्ट्स में एक नई विधि जोड़ते हैं। आप इसे सामान्य विधि की तरह कॉल कर सकते हैं:

yourModelStateDictionary.AddRuleViolations(errors); 

देखें, पहला पैरामीटर ('यह' पैरामीटर) छोड़ दिया गया है। यह आपके विस्तार विधि के लिए एक वैध लक्ष्य के रूप में केवल ModelStateDictionary असाइन करता है।

सुराग यह है कि आप इसे किसी वर्ग के साथ भी कर सकते हैं - यहां तक ​​कि सीलबंद या तृतीय पक्ष वर्ग, जैसे नेट फ्रेमवर्क कक्षाएं (उदाहरण के लिए ऑब्जेक्ट या स्ट्रिंग पर)।

+0

इसे अपने स्वयं को बेहतर नहीं लगा सका – TWith2Sugars

1

इसका मतलब है कि प्रश्न में विधि एक "विस्तार विधि" है और इसे कक्षा के तरीके के रूप में कहा जा सकता है। यह article देखें।

1

यह एक extention विधि हस्ताक्षर है इसका मतलब है "AddRuleViolations" ModelStateDictionary के एक extention पद्धति के रूप में माना जाएगा।

एमएसडीएन से।

एक्सटेंशन तरीकों आप बिना मौजूदा प्रकारको तरीकों "जोड़ें" के लिए एक नया व्युत्पन्न प्रकार, कंपाइल, या अन्यथा मूल प्रकार संशोधित बनाने सक्षम करें। एक्सटेंशन विधियां एक विशेष प्रकार की स्थैतिक विधि है, लेकिन उन्हें विस्तारित प्रकार पर इंस्टेंस विधियों के रूप में कहा जाता है। सी # और विजुअल बेसिक में लिखा ग्राहक कोड के लिए, वहाँ कोई स्पष्ट एक विस्तार विधि और तरीकों कि वास्तव में एक प्रकार से परिभाषित किया जाता बुला के बीच अंतर है।