Ein privater Setter für eine Liste, Sammlung, bedeutet usw., dass die gesamte Liste von den Verbrauchern nicht ersetzt werden kann, aber es tut nichts, um die Öffentlichkeit Mitglieder der Liste zu schützen.
Zum Beispiel:
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
}
}
Um die Verbraucher zu verhindern, dass die Mitglieder der Liste zu verändern Sie es als Read-Only-Schnittstelle aussetzen könnten, wie IEnumerable<string>
, ReadOnlyCollection<string>
oder durch List.AsReadOnly()
in der Erklärung des Aufruf Klasse.
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
}
}
Sie fügen einen Accessor zum Set hinzu. dh: {bekommen; privates Set; } – phillip
Sie müssen genauer sein. Möchten Sie verhindern, dass Clients die Referenz "Liste" ändern, oder möchten Sie verhindern, dass Clients Elemente zur Liste hinzufügen oder daraus entfernen? –
Ich möchte verhindern, dass Clients die Listenreferenz ändern. – anmarti