में मेरे माध्यम से बाल वर्ग गुणों तक पहुंचने से मेरा सीटीओ (मुख्य तकनीकी अधिकारी) ने मुझे एक ऐसे तरीके से आने के लिए कहा जहां वह बेस क्लास में एक एकल कार्य लिख सकता था, और सभी संपत्तियों तक पहुंच प्राप्त कर सकता था बाल वर्ग यहाँ मैं क्या लेकर आए हैं - फाइलअभिभावक वर्ग
बेस कक्षा
class Assets
{
public Assets getPropertyVal(Assets asObj)
{
PropertyInfo[] propInfos = asObj.GetType().GetProperties();
string strAttributeValue = "10";
foreach (PropertyInfo propInfo in propInfos)
{
// Getting the value
var propValue = propInfo.GetValue(asObj, null);
// Setting the value
propInfo.SetValue(asObj, Convert.ChangeType(strAttributeValue, propInfo.PropertyType), null);
}
return asObj;
}
}
बाल कक्षा
class House : Assets
{
public int rooms{get; set;}
}
Program.cs
class Program
{
static void Main(string[] args)
{
House hsObj = new House();
hsObj.rooms = 5;
Assets asObj = hsObj.getPropertyVal(hsObj);
// Returns asObj as JSON
}
}
अब यह ठीक काम करता है, लेकिन मैं बस सोच रहा था कि सी # में ऐसा करने का बेहतर तरीका है या नहीं।
ध्यान दें कि हमें नहीं पता कि बाल वर्ग में कौन सी संपत्तियां मौजूद होंगी, इसलिए इसे रन-टाइम पर निर्धारित करना होगा।
अद्यतन: यह स्पष्ट, मैं सिर्फ अगर वहाँ प्रतिबिंब का उपयोग किए बिना बच्चे वर्ग गुण, एक का उपयोग करने के लिए एक बेहतर तरीका है सोच रहा था बनाना। ध्यान देने योग्य महत्वपूर्ण बात यह है कि हमें नहीं पता कि बाल वर्ग के गुण क्या हो सकते हैं।
अद्यतन # 2: मैं ऐसे उत्पाद के साथ काम कर रहा हूं जिसमें कई संस्थाएं हैं। इन इकाइयों के पास अलग-अलग गुण हैं। मैं इन सभी गुणों के साथ एक ही स्थान पर पहुंचने और काम करने में सक्षम होना चाहता हूं। यह कार्य ठीक है। यह वह जगह है जहां से मैं सभी डेटा तक पहुंच सकता हूं।
अपने उदाहरण में, आप ऑब्जेक्ट बनाते हैं और ऑब्जेक्ट के सभी गुण प्राप्त करते हैं और फिर ऑब्जेक्ट में वही गुण सेट करते हैं। यह इस तरह दिखता है: 'var propValue = asObj.rooms; asObj.rooms = (int) propValue; '। तुम्हारी वास्तव में इच्छा क्या है? क्या आप एक बच्चे वर्ग से सभी वर्गों की मूल कक्षा में प्रतिलिपि बनाना चाहते हैं? –
@ व्याचेस्लाववल्कोव, मैं बस सोच रहा था कि प्रतिबिंब का उपयोग किए बिना बाल वर्ग गुणों तक पहुंचने का बेहतर तरीका है या नहीं। –
मुझे इसका उद्देश्य समझ में नहीं आता है। आपके उदाहरण में आप 'कंसोल। राइटलाइन (hsObj.rooms) के साथ बाल संपत्ति का नाम हार्ड-कोडिंग कर रहे हैं; '। आप भी 'hsObj = (हाउस) hsObj.getPropertyVal (hsObj) से छुटकारा पा सकते हैं; 'पूरी तरह से लाइन। प्रतिबिंब पूरी तरह बर्बाद हो गया है। क्या आप जो हासिल करने की कोशिश कर रहे हैं उसके बेहतर उदाहरण के साथ आ सकते हैं? – Dan