我相信這已被回答之前抱歉,但我不能凝結我的問題,以一個googlable短語。物業實施 - Noob缺乏知識
我有一個Pt3類,這是一個3D笛卡爾點(x,y,z屬性加上一些其他的好東西)。我使用Pt3類型作爲RegionProvider類中的get/set屬性值 - Location和Normal。
的位置屬性是好的,我不在乎財產是如何設置的:
//Location set method 1 - sweet...
RegionProvider Foo = new RegionProvider();
Foo.Location.x = 10;
Foo.Location.y = 20;
Foo.Location.z = 30;
//Location set method 2 - also sweet...
RegionProvider Foo2 = new RegionProvider();
Foo2.Location = new Pt3(10, 20, 30);
的普通屬性,雖然需要不同的行爲。如果需要,我希望RegionProvider類將輸入標準化爲Normal屬性。如果調用者將「正常」值設置爲40,50,60,則RegionProvider類將歸一化爲0.4558,0.5698,0.66838(給出向量長度== 1)。如果主叫方將執行以下操作,一切都很酷...
//Normal set method A - sweet...
Foo.Normal = new Pt3(40, 50, 60);
...但如果如果他們做到這一點悲傷將接踵而至:
//Normal set method B - grief...
Foo2.Normal.x = 40;
Foo2.Normal.y = 50;
Foo2.Normal.z = 60;
...因爲RegionProvider類將作爲正常化每個元素都被設置。我想要做的是防止調用者看到Normal屬性的x,y,z,所以他們被迫使用上面的方法'A'。
一個解決方案可能是不規範化屬性設置,但規範化屬性獲取但這看起來像fakery。
對於它的價值,這是我的普通財產申報:提前任何幫助
/// <summary>
/// Property for the objects normal
/// </summary>
public Pt3 Normal
{
set
{
_normal = Bit555ModelCore.NormalizeVector(value);
this.NotifyPropertyChanged("Normal");
}
get
{
return _normal;
}
}
乾杯....
標準.NET陷阱,從來沒有以同樣的方式,總是同樣的問題。 Normal屬性是一個值類型,當您訪問它時會得到一個副本。您將更新副本,而不是原件。樣板的智慧是「不要改變結構」。 – 2012-07-22 22:47:59
@HansPassant我不認爲這個問題是關於struct的。這是關於不允許獨立設置屬性的屬性。 – svick 2012-07-22 23:42:12