एक सूची, संग्रह, आदि के लिए कोई निजी सेटर मतलब यह है कि पूरी सूची उपभोक्ताओं द्वारा बदला नहीं जा सकता, लेकिन यह सूची के सार्वजनिक सदस्यों की रक्षा के लिए कुछ नहीं करता है।
उदाहरण के लिए:
public class MyClass
{
public IList<string> MyList {get; private set;}
public MyClass()
{
MyList = new List<string>(){"One","Two", "Three"};
}
}
public class Consumer
{
public void DoSomething()
{
MyClass myClass = new MyClass();
myClass.MyList = new List<string>(); // This would not be allowed,
// due to the private setter
myClass.MyList.Add("new string"); // This would be allowed, because it's
// calling a method on the existing
// list--not replacing the list itself
}
}
आदेश सूची के सदस्यों में फेरबदल से उपभोक्ताओं को रोकने के लिए आप एक केवल-पढ़ने के इंटरफेस के रूप में यह प्रकट कर सके, इस तरह IEnumerable<string>
, ReadOnlyCollection<string>
के रूप में, या घोषित करने के भीतर List.AsReadOnly()
फोन करके कक्षा।
public class MyClass
{
public IList<string> MyList {get; private set;}
public MyClass()
{
MyList = new List<string>(){"One","Two", "Three"}.AsReadOnly();
}
}
public class Consumer
{
public void DoSomething()
{
MyClass myClass = new MyClass();
myClass.MyList = new List<string>(); // This would not be allowed,
// due to the private setter
myClass.MyList.Add("new string"); // This would not be allowed, the
// ReadOnlyCollection<string> would throw
// a NotSupportedException
}
}
आप सेट में एक एक्सेसर जोड़ते हैं। यानी: {प्राप्त करें; निजी सेट; } – phillip
आपको और अधिक विशिष्ट होने की आवश्यकता है। क्या आप ग्राहकों को 'सूची' संदर्भ बदलने से रोकना चाहते हैं, या क्या आप ग्राहकों को सूची में आइटम जोड़ने या हटाने से रोकना चाहते हैं? –
मैं सूची संदर्भ बदलने वाले ग्राहकों को रोकना चाहता हूं। – anmarti