如果按照如上所寫,那麼class2對象可以通過Class1.Data屬性訪問和修改局部成員 myClass1某些值,這樣就可以修改了myClass2的私有成員myClass1的值,即會產生潛在錯 誤。
例如:
class1 myClass1 = myClass2.Class1;
myClass1.Data = "test2";
如何避免這類錯誤呢,那麼首先需要修改Class1屬性的編寫,其次在class1類需要提 供Clone函數或者其他copy函數,具體如下:
public class class1:ICloneable
{
string _data;
public class1( string data )
{
_data = data;
}
public string Data
{
get{ return _data;}
set{ _data = value;}
}
#region ICloneable Members
public object Clone()
{
// TODO: Add class1.Clone implementation
return new class1( _data );
}
#endregion
}
public class class2
{
private class1 myClass1 = null;
public class1 Class1
{
get{ return myClass1.Clone() as class1; }
}
public string Data
{
get{ return myClass1.Data;}
}
public class2( string data )
{
myClass1 = new class1( data );
}
}
第二個需要注意的是編寫屬性set部分的時候,這裡需要對參數進行有效性檢查。因為 屬性是外界修改類的私有成員的入口,為了避免因為私有成員不正確而產生的錯誤,所以 在進行屬性set的時候要進行有效性檢查,從而保證私有成員對於整個類來說是有效的。
那麼在實際應用當中,與屬性密切相關的就是實現兩個窗體之間數據訪問,這可能是 寫WinForm程序最基本的。不過很遺憾的是,網上在回答此類問題的時候,很多人都建議 用第一種方法來解決。