सी # संरक्षित क्षेत्र का उपयोग
मैं है निम्नलिखित कोड का टुकड़ा (यह सवाल C# accessing protected member in derived class लिए एक अनुवर्ती है):
public class Fox
{
protected string FurColor;
private string furType;
public void PaintFox(Fox anotherFox)
{
anotherFox.FurColor = "Hey!";
anotherFox.furType = "Hey!";
}
}
public class RedFox : Fox
{
public void IncorrectPaintFox(Fox anotherFox)
{
// This one is inaccessible here and results in a compilation error.
anotherFox.FurColor = "Hey!";
}
public void CorrectPaintFox(RedFox anotherFox)
{
// This is perfectly valid.
anotherFox.FurColor = "Hey!";
}
}
अब, हम जानते हैं कि private and protected fields are private and protected for type, not instance.
हम यह भी जानते हैं कि एक्सेस संशोधक को संकलन समय पर काम करना चाहिए। कारण है कि मैं
RedFox
मेंFox
वर्ग उदाहरण केFurColor
क्षेत्र तक नहीं पहुँच सकता -तो, यहां सवाल यह है?
RedFox
Fox
से लिया गया है, इसलिए संकलक जानता है कि इसकी संबंधित संरक्षित फ़ील्ड तक पहुंच है।इसके अलावा, जैसा कि आप
CorrectPaintFox
में देख सकते हैं, मैंRedFox
क्लास इंस्टेंस के संरक्षित क्षेत्र तक पहुंच सकता हूं। तो, मैंFox
कक्षा उदाहरण से इसकी अपेक्षा क्यों नहीं कर सकता?
उस विषय पर एरिक लिपर्ट द्वारा एक ब्लॉग पोस्ट है [http://blogs.msdn.com/b/ericlippert/archive/2005/11/09/491031.aspx)। –
क्यों? क्योंकि इस प्रकार भाषा निर्दिष्ट की गई थी: http://msdn.microsoft।com/en-us/library/aa691129 (v = vs.71) .aspx –