2012-08-24 22 views
17

काम नहीं करती है मेरे आवेदन में कई मॉडलों को Password गुणों (उदाहरण के लिए, Registration और ChangePassword मॉडल) की आवश्यकता होती है। Password संपत्ति में DataType और Required जैसी विशेषता है। इसलिए फिर से प्रयोज्य एक निरंतरता का सुनिश्चित करने के लिए, मैं बनाया:इंटरफेस सदस्यों पर विशेषता

interface IPasswordContainer{ 
    [Required(ErrorMessage = "Please specify your password")] 
    [DataType(DataType.Password)] 
    string Password { get; set; } 
} 

और

class RegistrationModel : IPasswordContainer { 
    public string Password { get; set; } 
} 

दुर्भाग्य से, विशेषताओं के काम नहीं करता है।

public class PasswordContainer { 
    [Required(ErrorMessage = "Please specify your password")] 
    [DataType(DataType.Password)] 
    public virtual string Password { get; set; } 
} 

और

public class RegistrationModel : PasswordContainer { 
    public override string Password { get; set; } 
} 

अब यह काम कर रहा है:

तो मैं एक वर्ग के लिए इंटरफ़ेस को बदलने की कोशिश की। जाने क्यों?

कक्षा से विरासत में प्राप्त होने पर गुण क्यों काम कर रहे हैं लेकिन इंटरफ़ेस से विरासत में काम करते समय काम नहीं कर रहे हैं?

+0

http://stackoverflow.com/questions/540749/can-ac-sharp-class-inherit-attributes-from-its-interface – KyorCode

+0

http://bradwilson.typepad.com/blog/2011 /08/interface-attributes-class-attributes.html भी उपयोगी – KyorCode

+0

@KyorCode: खोजे जाने पर आपको पहली टिप्पणी में पोस्ट किया गया प्रश्न नहीं मिला। यहां तक ​​कि संबंधित प्रश्नों की सूची में भी नहीं। मैंने इस सवाल को आपके द्वारा रेफरी किए गए प्रश्न के सटीक डुप्लिकेट के रूप में चिह्नित किया है। – Mohayemin

उत्तर

20

इंटरफ़ेस गुणों पर गुण कक्षा में विरासत में नहीं मिलते हैं, तो आप अपना इंटरफ़ेस एक सार कक्षा बना सकते हैं।

मिले एक answer from Microsoft: में मान्यता व्यवहार के साथ DataAnnotations.Validator

  • संगति के साथ

    • संगति:

      उत्पाद टीम के दो मुख्य कारणों के लिए इस सुविधा को लागू करने के लिए, नहीं चाहता है एएसपी.NET एमवीसी

    • मुश्किल परिदृश्य: एक वर्ग दो इंटरफेस लागू करता है जिसमें एक ही संपत्ति होती है, लेकिन संघर्ष के साथ उन पर टिंग विशेषताएँ। कौन सा विशेषता प्राथमिकता लेगी?
  • +3

    हालांकि आंशिक रूप से समझा गया, यह बहुत निराशाजनक है। मुझे क्या समझ में नहीं आता है: एकाधिक गुणों को संपत्ति विशेषताओं के साथ क्यों समस्या होनी चाहिए, लेकिन विधि विशेषताओं के साथ नहीं? और भाषा डिजाइन को एक निश्चित रूपरेखा से क्यों प्रभावित किया जाना चाहिए जैसे एएसपी.नेट एमवीसी जो भाषा पर आधारित है? – chiccodoro

    +10

    बदले में, यह समझ में आता है क्योंकि गुण व्यवहार जोड़ते हैं, और इंटरफेस व्यवहार को परिभाषित नहीं करना चाहिए। एक इंटरफेस को लागू करने वाली कक्षा को ऐसा करना चाहिए। – chiccodoro

    +7

    @chiccodoro वे व्यवहार को परिभाषित नहीं करते हैं। वे मेटा जानकारी प्रदान करते हैं। स्वयं द्वारा एक विशेषता के अतिरिक्त कोड के बिना कोई प्रभाव नहीं पड़ेगा और इस प्रकार व्यवहार को परिभाषित नहीं करता है। चलिए इस सुविधा के लिए बहाना नहीं बनाते हैं। – Dbl