我确定在抱歉之前已经回答了这个问题,但我无法将我的问题浓缩为可谷歌搜索的短语。
我有一个 Pt3 类,它是一个 3d 笛卡尔点(x、y、z 属性加上其他一些好东西)。我使用 Pt3 类型作为 RegionProvider 类中的 get/set 属性值 - 用于 Location 和 Normal。
Location 属性很好,我不在乎属性是如何设置的:
//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);
Normal 属性需要不同的行为。如果需要,我希望 RegionProvider 类将输入规范化为 Normal 属性,例如,如果调用者将“正常”值设置为 40,50,60,RegionProvider 类将规范化为 0.4558、0.5698、0.6838(给出向量长度 == 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”。
一种解决方案可能是根本不规范化属性集,而是规范化属性获取,但这似乎是伪造的。
对于它的价值,这是我的 Normal 属性声明:
/// <summary>
/// Property for the objects normal
/// </summary>
public Pt3 Normal
{
set
{
_normal = Bit555ModelCore.NormalizeVector(value);
this.NotifyPropertyChanged("Normal");
}
get
{
return _normal;
}
}
提前欢呼任何帮助....