2012-11-06 31 views
5

क्या विशेषता के साथ इंटरफ़ेस बनाने का कोई तरीका है जिसे इंटरफ़ेस लागू करने वाले वर्ग द्वारा उपयोग किया जाना है?इंटरफ़ेस जिसके लिए विशेषता को लागू करने की आवश्यकता है

आईई। यदि क्लास फू इंटरफ़ेस IFoo लागू करता है, और IFoo को ObserveMeAttribute के रूप में परिभाषित किया गया है, तो Foo को IFoo को लागू करने के लिए ObserveMe पर परिभाषित होना चाहिए।

संपादित करें:

गुण EntityTypeAttribute कहा जाता है और दृश्य मॉडल के लिए इकाई प्रकार निर्दिष्ट करने के लिए प्रयोग किया जाता है, उपयोग के साथ:

[EntityType(typeof(User))] 
public class UserViewModel 
{ 
... 
} 

गुण एक विस्तार विधि AddModel में प्रयोग किया जाता है (टी TModel) जहां विशेषता TModel से पढ़ा जाता है, और इसकी संपत्ति प्रकार इकाई टाइप टाइप का उपयोग इकाई स्टब ऑब्जेक्ट बनाने के लिए किया जाता है।

+0

मान लीजिए, मैंने कॉलेज से इंटरफेस के साथ बहुत कुछ नहीं किया है, लेकिन मैंने सोचा कि एक वर्ग ने इंटरफ़ेस को लागू किया है, तो उसे उस इंटरफ़ेस में सब कुछ लागू करना था? यही वह है जो मैं [इंटरफेस (सी # प्रोग्रामिंग गाइड)] से इकट्ठा करता हूं (http://msdn.microsoft.com/en-us/library/vstudio/ms173156.aspx) – MyCodeSucks

उत्तर

3

सरल उत्तर "नहीं" है। यदि प्रत्येक ऑब्जेक्ट में यह मान लागू करने के लिए IFoo है, तो आप इसे IFoo इंटरफ़ेस का हिस्सा क्यों नहीं बनाते?

गुण मुख्य रूप से प्रतिबिंब का उपयोग करके रन-टाइम पर कक्षा/विधि/पैरामीटर के बारे में अतिरिक्त घोषणात्मक जानकारी खोजने के लिए एक तंत्र हैं।

+0

उन्हें कक्षाओं से दूर अमूर्त दोहराव तर्क से भी पेश किया जाता है मैं वही करने की कोशिश कर रहा हूं। मैं अपने मॉडल वर्गों के लिए अतिरिक्त गुणों को पेश करने का शौक भी नहीं हूं जो ऑब्जेक्ट परिभाषा का हिस्सा नहीं हैं। –

+0

आप संभवतः रन-टाइम (या कस्टम बिल्ड चरण में) पर इस विशेषता की उपस्थिति की जांच करने के साथ अटक गए हैं। उस पर किसी Ixxx इंटरफ़ेस वाले किसी चीज़ से निपटने के लिए दोहराव तर्क एक विस्तार विधि में रखा जा सकता है। आपकी विशेषता और उपयोग का एक उदाहरण मदद कर सकता है। –

+0

मैंने विशेषता का विवरण जोड़ा है। असल में मैं यह सुनिश्चित करना चाहता हूं कि मेरे जेनेरिक व्यू मॉडल को त्रुटि प्रबंधन बनाने के बजाय EntityTypeAttribute के साथ सजाया जाना है। –

0

आप ऐसा नहीं कर सकते हैं। लेकिन आप अपने ViewModel वर्ग एक मॉडल वर्ग सामान्य तर्क के साथ सामान्य बनाने के द्वारा अपनी समस्या को हल कर सकते हैं:

public abstract class Model 
{ 
... 
} 

public abstract class ViewModel<TModel> where TModel : Model 
{ 
... 
} 

और प्रत्येक मॉडल और ViewModel के लिए इस सार कक्षाओं में अपने दोहराए तर्क को लागू। फिर आपके पास होगा:

public class User : Model 
{ 
... 
} 

public class UserViewModel : ViewModel<User> 
{ 
... 
} 
संबंधित मुद्दे

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