मेरे पास कुछ कक्षाएं हैं जिन्हें मैं किसी विशेष विशेषता के साथ टैग करना चाहता हूं। मेरे मन में दो दृष्टिकोण हैं। एक विशेषता-विस्तार वर्ग का उपयोग करना शामिल है। अन्य एक खाली इंटरफ़ेस का उपयोग करता:टैगिंग कक्षाओं के लिए इंटरफ़ेस या विशेषताएँ?
गुण
public class FoodAttribute : Attribute { }
[Food]
public class Pizza { /* ... */ }
[Food]
public class Pancake { /* ... */ }
if (obj.IsDefined(typeof(FoodAttribute), false)) { /* ... */ }
इंटरफ़ेस
public interface IFoodTag { }
public class Pizza : IFoodTag { /* ... */ }
public class Pancake : IFoodTag { /* ... */ }
if (obj is IFoodTag) { /* ... */ }
मैं विशेषताओं का उपयोग करने में संकोच कर रहा हूँ प्रतिबिंब के अपने उपयोग के कारण। उसी समय, हालांकि, मैं एक खाली इंटरफ़ेस बनाने में संकोच कर रहा हूं जो वास्तव में केवल एक टैग के रूप में कार्यरत है। मैंने दोनों का तनाव परीक्षण किया है और दोनों के बीच का समय अंतर केवल तीन मिलीसेकंड है, इसलिए प्रदर्शन यहां पर नहीं है।
बस सोच, यदि कोई वस्तु भोजन है तो आप क्या करते हैं? यदि IFood इंटरफ़ेस खाली है, तो आप उन्हें किस प्रकार अंतर करते हैं? ... – serhio
यदि ऑब्जेक्ट भोजन है, तो मैं FoodEventArguments वापस कर दूंगा। यदि वस्तु थी, कहो, पेय, मैं DrinkEventArguments वापस आऊंगा। असल में, एक सामान्य बेस क्लास है (मान लें कि रियायतस्टैंड इटिम) जो फ़ंक्शन में पास हो जाती है। – Scott
यह भी देखें: http://blogs.msdn.com/ericlippert/archive/2009/02/02/properties-vs-attributes.aspx –