मैं वस्तुओं के लिए जहां कुंजी प्रकार Type
की है की एक सामान्य शब्दकोश है:टाइप-सुरक्षित एक शब्दकोश के साथ वस्तुओं की सेटिंग है कि एक `Type` कुंजी
public class DynamicObject : IDictionary<Type, object>
विचार है कि इस वस्तु में साझा किया जाता है एक प्लगइन-आधारित आर्किटेक्चर और प्लगइन के बीच संघर्ष को रोकने के लिए एक प्रकार (जो प्लगइन .dll में रह सकता है) को कुंजी के रूप में उपयोग किया जाता है। इस प्रकार का उपयोग मेटाडेटा को फ़ील्ड के बारे में भी संग्रहीत करने के लिए किया जाता है (जैसे कि उस फ़ील्ड का विवरण या उस फ़ील्ड का वास्तविक प्रकार)। भले ही प्रकार UsernameField
बारे में पता है -
DynamicObject someObject;
string someValue;
someObject[typeof(UsernameField)] = someValue;
इस के साथ ही समस्या यह है कि इस टाइप सुरक्षित नहीं है:
वर्तमान में प्लगइन्स इस के समान कोड का उपयोग कर इस वस्तु पर क्षेत्रों का मूल्य निर्धारित करने की आवश्यकता जिस मूल्य की अपेक्षा की जा रही है उसका सटीक प्रकार (उदाहरण के लिए int
या इस मामले में string
), यहां दिया गया मान केवल एक ऑब्जेक्ट के रूप में टाइप किया गया है। मैं प्रॉपर्टी प्रकार को सुरक्षित/स्थापित करने के लिए जेनेरिक का उपयोग करना चाहता हूं लेकिन मुझे यकीन नहीं है कि कैसे। अब तक सबसे अच्छा मैं ले कर आए हैं यह है:
// Field is a base class for all types used as keys on DynamicObject
[Description("Username of the user")]
public class UsernameField : Field
{
public static void Set(DynamicObject obj, string value)
{
obj[typeof(UsernameField)] = someValue;
}
}
// To set fields
UsernameField.Set(obj, someValue);
इस प्रकार सुरक्षित है, लेकिन इसका मतलब यह मेरा क्षेत्र प्रकारों में से प्रत्येक (जैसे UsernameField
) एक लगभग समान स्थिर Set
विधि है।
मेरे रास्ते के प्रत्येक प्रकार के लगभग समान तरीकों के बिना इस तरह के मूल्यों में टाइप-सुरक्षित पहुंच कैसे हो सकती है?
एक तरफ के रूप में, Type
का उपयोग इस तरह की एक कुंजी के रूप में कर रहा है या ऐसे छिपे हुए नुकसान हैं जिनके बारे में मुझे अभी तक पता नहीं है?
public interface IPlugin {
string Name { get; }
string Author { get; }
string Description { get; }
void Init();
}
और फिर एक Dictionary<Type, IPlugIn>
का उपयोग करें:
क्या 'Type' और' यहां object' के बीच संबंध है? 'टाइप'' प्रकार का 'ऑब्जेक्ट' हमेशा होता है? –
क्या आप MyObject और MyField को और अधिक सार्थक नाम दे सकते हैं ताकि हम उनके अर्थ को समझ सकें? –
@MarcGravell इस समय मान वास्तव में कुंजी के समान प्रकार के नहीं होते हैं, इसलिए ऊपर 'कुछ वैल्यू' वास्तव में 'स्ट्रिंग' नहीं है 'माईफिल्ड'। यह कहकर कि मैं इसे बदल सकता हूं ताकि यह मामला हो (आपका अब हटाए गए उत्तर को देखकर) – Justin