जॉन की जवाब आदर्श है - सिर्फ एक अवलोकन: सामान्य डिजाइन के हिस्से के रूप, मैं करूंगा:
- आम तौर पर गैर सरकारी सदस्यों के खिलाफ दर्शाती बचने
- बचने सार्वजनिक क्षेत्रों होने (लगभग हमेशा)
इन दोनों का नतीजा यह है कि सार्वजनिक संपत्तियों के खिलाफ प्रतिबिंबित करने के लिए आम तौर पर आप केवल जरूरत है (यदि आप नहीं करना चाहिए है कॉलिंग विधियों को तब तक कॉल करें जब तक कि आप नहीं जानते कि वे क्या करते हैं; संपत्ति गेटर्स होने की उम्मीद है [आलसी लोडिंग]]। तो PropertyInfo
के लिए यह केवल prop.GetValue(obj, null);
है।
वास्तव में, मैं System.ComponentModel
के एक बड़े प्रशंसक हूँ, इसलिए मैं का उपयोग करने के लिए परीक्षा होगी:
foreach(PropertyDescriptor prop in TypeDescriptor.GetProperties(obj))
{
Console.WriteLine("{0}={1}", prop.Name, prop.GetValue(obj));
}
या एक विशिष्ट संपत्ति के लिए:
PropertyDescriptor prop = TypeDescriptor.GetProperties(obj)["SomeProperty"];
Console.WriteLine("{0}={1}", prop.Name, prop.GetValue(obj));
एक System.ComponentModel
का लाभ यह है कि है अमूर्त डेटा मॉडल के साथ काम करेंगे, जैसे DataView
वर्चुअल गुणों के रूप में कॉलम का खुलासा करता है; अन्य चाल भी हैं (जैसे performance tricks)।
स्रोत
2008-10-26 21:33:09
धन्यवाद जॉन - आपको एक उदाहरण एक MemberInfo वस्तु हालांकि साथ शुरू दे सकता है? –
किस तरह का? MemberInfos गुण, फ़ील्ड, विधियों, घटनाओं या अन्य प्रकार हो सकता है। आप उन्हें उसी तरह से इलाज नहीं कर सकते हैं। उदाहरण के लिए, नेस्टेड प्रकार का "मूल्य" क्या होगा? शायद आपको अपनी समस्या के बारे में हमें और बताना चाहिए। –
बहुत खराब GetValue/SetValue एक इंटरफ़ेस नहीं था जिसे चेक किया जा सकता था। –