मैं कैसे एक कस्टम विशेषता लिखने के लिए विधि मानकों को मान्य करने, यानी, इस फार्म बारी के उदाहरण खोजने के लिए संघर्ष कर रहा है:विधि पैरामीटर का उपयोग कैसे करें गुण
public void DoSomething(Client client)
{
if (client.HasAction("do_something"))
{
// ...
}
else
{
throw new RequiredActionException(client, "do_something");
}
}
इस में
:
public void DoSomething([RequiredAction(Action="some_action")] Client client)
{
// ...
}
जहां तक मेरा बता सकते हैं, मैं अपने कस्टम विशेषता से इस विशेषता को जोड़ने की जरूरत है, लेकिन मैं कैसे सजाया पैरामीटर Client
उपयोग करने के लिए पर एक नुकसान में हूँ:
[AttributeUsageAttribute(AttributeTargets.Parameter)]
public class RequireActionAttribute : System.Attribute
{
public Type Action {get; set;}
public RequireActionAttribute()
{
// .. How do you access the decorated parameter?
Client client = ???
if (!client.HasAction(Action))
{
throw new RequiredActionException(client, Action);
}
}
}
आप पैरामीटर के रूप में इंटरफ़ेस को स्वीकार क्यों नहीं कर सकते? उदाहरण के लिए, आपके पास 'IDoSomething' हो सकता है। –
आप विशेषता के अंदर से सजाए गए आइटम तक नहीं पहुंच सकते हैं। गुण मेटा-डेटा प्रकार के अनुसार स्थिर रूप से बैठते हैं, इसलिए आपको वास्तव में आइटम से विशेषता मिलती है। उस ने कहा, विशेषता तब एक विधि हो सकती है जो एक तर्क लेती है जो वस्तु है, लेकिन फिर आप एक अखरोट को तोड़ने के लिए एक स्लेजहैमर का उपयोग कर रहे हैं और गुणों के बिना इसे बहुत आसान बना सकते थे। –