मेरे पास एक कक्षा है जो प्रोग्रामर गतिशील रूप से नई गुणों को जोड़ने के लिए उपयोग कर सकता है। इसके लिए यह GetProperties()
विधि को ओवरराइड करने में सक्षम होने के लिए ICustomTypeDescriptor
लागू करता है।रनटाइम पर गुण जोड़ें
public class DynamicProperty
{
public object Value { get; set; }
public Type Type { get; set; }
public string Name { get; set; }
public Collection<Attribute> Attributes { get; set; }
}
public class DynamicClass : ICustomTypeDescriptor
{
// Collection to code add dynamic properties
public KeyedCollection<string, DynamicProperty> Properties
{
get;
private set;
}
// ICustomTypeDescriptor implementation
PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties()
{
// Properties founded within instance
PropertyInfo[] instanceProps = this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
// Fill property collection with founded properties
PropertyDescriptorCollection propsCollection =
new PropertyDescriptorCollection(instanceProps.Cast<PropertyDescriptor>().ToArray());
// Fill property collection with dynamic properties (Properties)
foreach (var prop in Properties)
{
// HOW TO?
}
return propsCollection;
}
}
यह गुण सूची पर दोहराने में PropertyDescriptorCollection
के लिए प्रत्येक प्रॉपर्टी जोड़ने के लिए संभव है?
असल में मैं चाहता हूं कि प्रोग्रामर DynamicProperty
को एक संग्रह में जोड़ सके जो GetProperties
द्वारा संभाला जाएगा। कुछ की तरह:
new DynamicClass()
{
Properties = {
new DynamicProperty() {
Name = "StringProp",
Type = System.String,
Value = "My string here"
},
new DynamicProperty() {
Name = "IntProp",
Type = System.Int32,
Value = 10
}
}
}
जब भी GetProperties
कहा जाता है अब उन Properties
उदाहरण गुणों के setted किया जाएगा। क्या मैं इसे सही तरीके से सोच रहा हूं?
'propertyType' संपत्ति का प्रकार सही है? घटक टाइप के बारे में क्या? क्या यह उस वस्तु का प्रकार है जहां संपत्ति बैठती है? – Joao
'propertyType' गतिशील संपत्ति का प्रकार है। यदि आपके पास 'गणना' नामक एक गतिशील पूर्णांक संपत्ति है, तो यह 'टाइपऑफ (int) 'होगी। 'घटक प्रकार' उस वर्ग का प्रकार है जिसमें गतिशील गुण हैं, उदा। 'Typeof (MyDynamicPropertyClass)'। –
बस एक और सवाल। इस तरह यदि किसी संपत्ति को पहले 'गुण' सूची के माध्यम से जोड़ा गया है, तो गतिशील रूप से उपयोग किया जाता है (उदाहरण के लिए 'var' का उपयोग करके) क्या मैं सुनिश्चित कर सकता हूं कि' प्रॉपर्टी एक्सेस ') का उपयोग उस संपत्ति तक पहुंचने के लिए किया जाता है? – Joao