मैं अक्सर देखा है और संलग्न गुण इस तरह के एक प्रदर्शन नाम या विवरण प्रदान करने के रूप में कुछ बुनियादी काम करने के साथ enums उपयोग किया है:"अपरिवर्तनीय समृद्ध वस्तु के रूप में enum": क्या यह एक विरोधी पैटर्न है?
public enum Movement {
[DisplayName("Turned Right")]
TurnedRight,
[DisplayName("Turned Left")]
[Description("Execute 90 degree turn to the left")]
TurnedLeft,
// ...
}
और विस्तार के तरीकों का एक सेट विशेषताओं का समर्थन करने के लिए किया है:
public static string GetDisplayName(this Movement movement) { ... }
public static Movement GetNextTurn(this Movement movement, ...) { ... }
इस पैटर्न के बाद, अतिरिक्त मौजूदा या कस्टम विशेषताओं अन्य काम करने के लिए क्षेत्रों के लिए लागू किया जा सकता।
public class Movement
{
public int Value { get; set; } // i.e. the type backing the enum
public string DisplayName { get; set; }
public string Description { get; set; }
public Movement GetNextTurn(...) { ... }
// ...
}
इस तरह, यह कर सकते हैं "यात्रा" एक सरल रूप में: यह लगभग रूप में अगर enum सरल enumerated मान प्रकार यह है के रूप में और खेतों के एक नंबर के साथ एक अधिक समृद्ध अपरिवर्तनीय मूल्य वस्तु के रूप में काम कर सकते हैं है क्रमिकरण के दौरान क्षेत्र, जल्दी से तुलना की जानी चाहिए, आदि। फिर भी व्यवहार "आंतरिक" (अला ओओपी) हो सकता है।
उसने कहा, मुझे लगता है कि इसे एक विरोधी पैटर्न माना जा सकता है। पर मुझे का एक ही समय हिस्सा इस उपयोगी समझता है पर्याप्त विरोधी भी सख्त हो सकता है।
क्या आप पूछ रहे हैं कि इस पैटर्न का उपयोग उन जगहों पर करने का बुरा विचार है जहां आप अन्यथा enum का उपयोग नहीं करेंगे? मेटा-डेटा को मूल्यों को समेकित करने के लिए यह एक महान पैटर्न है।कक्षाओं के प्रतिस्थापन के रूप में यह इतना अच्छा नहीं है। –
इसे भाषा का "दुरुपयोग" माना जा सकता है; उदाहरण के लिए जरूरी नहीं होने पर लगभग हर समय 'गतिशील' का उपयोग करना। – Kit
बिल्कुल बिंदु पर नहीं (इसलिए टिप्पणी), लेकिन मुझे उस मामले के लिए किसी विशेषता में प्रदर्शित होने के लिए एन्कोडिंग टेक्स्ट के बारे में गलतफहमी है - या किसी इकाई वर्ग के पास कहीं भी। एक बात के लिए, मुझे लगता है कि यह "चिंताओं का पृथक्करण" का उल्लंघन करता है और दूसरे के लिए, इसे स्थानीयकृत करने का कोई स्पष्ट तरीका नहीं है। हां, एमएस इस तरह की चीज को प्रोत्साहित करता है, इसलिए शायद मैं दोपहर के भोजन के लिए बाहर हूं। –