的SelectedDatesCollection作爲一個屬性是隻讀的,但你仍然可以改變它作爲一個對象,如添加或刪除項目。
有改變對象之間的差(也稱爲調用它與變化的方法它的數據),和改變所述對象引用本身,作爲一類的成員,等等
通過這樣做:
SelectedDatesCollection dates = Calendar1.SelectedDates;
您不是複製集合,而是保存它的引用,如同給它一個別名。
最終,你也可以這樣做:
protected void Page_Load(object sender, EventArgs e)
{
Calendar1.SelectedDates.Add(new DateTime(2012, 5, 1));
Calendar1.SelectedDates.Add(new DateTime(2012, 5, 5));
Calendar1.SelectedDates.Add(new DateTime(2012, 5, 9));
}
這僅僅是一個會說的其他方式更具有可讀性。
dates
和Calendar1.SelectedDates
包含對完全相同的對象的引用。 在dates
上調用Add
方法就像在Calendar1.SelectedDates
上調用它,反之亦然。
當您嘗試在第二段代碼(不編譯)中嘗試執行Calendar1.SelectedDates
時,原因是SelectedDates被標記爲只讀,如您所說。
將成員標記爲只讀意味着它只會立即或在類/結構體/等的構造函數中分配。
但是,它並不意味着您不能更改該對象內的數據。
從現在開始,它只是一些額外的信息
有一類ReadOnlyCollection,不允許改變它的元素。
因此,例如,只讀屬性ReadOnlyCollection意味着您不能更改成員,並且也無法更改元素。
例子:
public class Class1
{
public List<int> Numbers = new List<int> {1, 2, 3};
}
public class Class2
{
public readonly List<int> Numbers = new List<int> {1, 2, 3};
}
public class Class3
{
public ReadOnlyCollection<int> Numbers = new ReadOnlyCollection<int> {1, 2, 3};
}
public class Class3
{
public readonly ReadOnlyCollection<int> Numbers = new ReadOnlyCollection<int> {1, 2, 3};
}
差異:
var c1 = new Class1();
var c2 = new Class2();
var c3 = new Class3();
var c4 = new Class4();
c1.Numbers = new List<int> {4, 5, 6}; // Works
c1.Numbers.Clear(); // Works
c2.Numbers = new List<int> {4, 5, 6}; // Error
c2.Numbers = c2.Numbers; // Error - you just can't reassign it!
c2.Numbers.Clear(); // Works - you are just calling the Clear method of the existing list object.
c3.Numbers = new ReadOnlyCollection<int> {4, 5, 6}; // Works - the member is not readonly
// ReadOnlyCollection doesn't allow to change it's elements after initializing it.
// It doesn't even have these functions:
c3.Numbers.Clear(); // Error
c3.Numbers.Add(); // Error
c3.Numbers.Remove(2); // Error
c4.Numbers = new ReadOnlyCollection<int> {4, 5, 6}; // Error - the member is marked as readonly
// ReadOnlyCollection doesn't allow to change it's elements after initializing it.
// It doesn't even have these functions:
c4.Numbers.Clear(); // Error
c4.Numbers.Add(); // Error
c4.Numbers.Remove(2); // Error
所有這些答案都非常棒,幫助了我。希望我可以將所有標記爲答案。再次感謝。 – CptSupermrkt