इस प्रतिरूप के लिए एक नाम है?क्या इस पैटर्न के लिए कोई नाम है? ("पैरामीटर" विभिन्न प्रकार के आर्ग के साथ सी # संकलन समय प्रकार- सुरक्षा)
मान लें कि आप एक ऐसी विधि बनाना चाहते हैं जो तर्कों की एक परिवर्तनीय संख्या लेती है, जिनमें से प्रत्येक एक निश्चित प्रकार (किसी भी क्रम या संयोजन में) में से एक होना चाहिए, और उनमें से कुछ प्रकारों पर आपका कोई नियंत्रण नहीं है । एक आम दृष्टिकोण अपने विधि प्रकार वस्तु का तर्क ले, और रनटाइम पर प्रकार मान्य करने के लिए होगा:,
void MyMethod (params object[] args)
{
foreach (object arg in args)
{
if (arg is SomeType)
DoSomethingWith((SomeType) arg);
else if (arg is SomeOtherType)
DoSomethingElseWith((SomeOtherType) arg);
// ... etc.
else throw new Exception("bogus arg");
}
}
हालांकि की है कि, मेरे जैसे, आप संकलन समय प्रकार सुरक्षा से ग्रस्त रहे हैं का कहना है, और संकलन समय पर अपनी विधि के तर्क प्रकार को सत्यापित करने में सक्षम होना चाहते हैं।
void MyMethod (params MyArg[] args)
{
// ... etc.
}
struct MyArg
{
public readonly object TheRealArg;
private MyArg (object obj) { this.TheRealArg = obj; }
// For each type (represented below by "GoodType") that you want your
// method to accept, define an implicit cast operator as follows:
static public implicit operator MyArg (GoodType x)
{ return new MyArg(x); }
}
निहित डाले स्पष्ट रूप से डाली या उन्हें रैप करने के लिए बिना, आप सीधे अपने दिनचर्या के लिए मान्य प्रकार के तर्कों से गुजरने की अनुमति: यहाँ एक दृष्टिकोण मैं के साथ आया है। यदि आप अस्वीकार्य प्रकार के मान को पारित करने का प्रयास करते हैं, तो त्रुटि संकलन समय पर पकड़ा जाएगा।
मुझे यकीन है कि दूसरों के इस दृष्टिकोण का इस्तेमाल किया है हूँ, इसलिए इस पद्धति के लिए एक नाम हो, तो मैं सोच रहा हूँ।
मुझे कुछ याद आ रहा है, लेकिन मुझे कोई पैटर्न नहीं दिख रहा है। –
अच्छी चाल! +1। –
आप जानते हैं, आपके पास "आवश्यक प्रकार" एक सामान्य इंटरफ़ेस को लागू कर सकता है, और उसके बाद 'पैरा IWhatever [] args' ले सकता है। –