ठीक है, चलो कहते हैं कि हम एक वर्गप्रतिबिंब सिद्धांत encapsulation सिद्धांत तोड़ रहा है?
public class TestClass
{
private string MyPrivateProperty { get; set; }
// This is for testing purposes
public string GetMyProperty()
{
return MyPrivateProperty;
}
}
तरह परिभाषित किया है चलो फिर हम कोशिश: के रूप में उम्मीद
TestClass t = new TestClass { MyPrivateProperty = "test" };
संकलन, TestClass.MyPrivateProperty is inaccessible due to its protection level
साथ विफल रहता है।
TestClass t = new TestClass();
t.MyPrivateProperty = "test";
की कोशिश करो और संकलन फिर विफल रहता है, एक ही संदेश के साथ।
अब तक सभी अच्छे, हम इसकी अपेक्षा कर रहे थे।
लेकिन फिर एक लिखने:
PropertyInfo aProp = t.GetType().GetProperty(
"MyPrivateProperty",
BindingFlags.NonPublic | BindingFlags.Instance);
// This works:
aProp.SetValue(t, "test", null);
// Check
Console.WriteLine(t.GetMyProperty());
और यहाँ हम कर रहे हैं, हम एक निजी क्षेत्र को बदलने में कामयाब रहे।
क्या यह किसी असामान्य नहीं है कि प्रतिबिंब का उपयोग करके किसी ऑब्जेक्ट की आंतरिक स्थिति को बदलने में सक्षम हो?
संपादित करें:
उत्तरों अब तक के लिए धन्यवाद। उन लोगों के लिए "आपको इसका उपयोग नहीं करना है": क्लास डिजाइनर के बारे में क्या, ऐसा लगता है कि वह अब आंतरिक राज्य सुरक्षा नहीं ले सकता है?
बस प्रतिबिंब का उपयोग करके? कोई प्रतिबिंब का उपयोग नहीं करता है, एक बिल्कुल जानता है कि वह एपीआई तोड़ रहा है। –