c#中get好set中value赋值的问题,先看一段代码吧

thebrutalwolf 2013-03-22 10:42:59
public double Magnitude
{
get
{
return Math.Sqrt(this.SumComponentSqrs());
}
set
{
if (value < 0.0)
{
throw new ArgumentOutOfRangeException("value", value, "The magnitude of a Vector3 must be a positive value, (i.e. greater than 0)");
}
if (this == new Vector3(0.0, 0.0, 0.0))
{
throw new ArgumentException("Cannot change the magnitude of Vector3(0,0,0)", "this");
}
this = (Vector3) (this * (value / this.Magnitude));
}



这个代码的诡异之处是Magnitude自己给自己赋值了
但是,我看了2天代码,包括子程序和主程序
都没有其他外在程序给Magnitude赋值的语句
例如:object.Magnitude=x
等等诸如语句,什么都没有
难道,Magnitude能自我迭代自己?是错的吧!?
其中this 就是Vector3
...全文
324 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
thebrutalwolf 2013-03-24
  • 打赏
  • 举报
回复
引用 1 楼 dongxinxi 的回复:
set里的value / this.Magnitude 会去访问get,因此那个地方等价于 value / Math.Sqrt(this.SumComponentSqrs()); 如果是迭代调用属性自己反而错了(比如get里访问属性值,set里再给属性本身赋值),死循环,堆栈直接溢出 但是你上面那个不是的,get:每次访问this.Magnitude,都会进行那个运算
是不是说,get和set之间一旦发生迭代调用就会错误? 就算错误怎么才能实现迭代呢?
thebrutalwolf 2013-03-23
  • 打赏
  • 举报
回复
谢谢,dongxinxi 你水平真高 简单一句话,让我有点明白了 我在研究下和大家交流
  • 打赏
  • 举报
回复
set里的value / this.Magnitude 会去访问get,因此那个地方等价于 value / Math.Sqrt(this.SumComponentSqrs()); 如果是迭代调用属性自己反而错了(比如get里访问属性值,set里再给属性本身赋值),死循环,堆栈直接溢出 但是你上面那个不是的,get:每次访问this.Magnitude,都会进行那个运算

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧