C#,使用运算符对通过属性获取的值(get)
在C#中,我们定义一个属性如下:
// m_age is a private int in the class Employee public int Age { get {return m_age;} set {m_age = value;} } 现在,当我这样做 static void Main() { Employee e = new Employee(age: 28); // Create new Employee System.Console.WriteLine("Age: {0}",e.Age); // Prints 28 // Now increase age by 1 ++e.Age; System.Console.WriteLine("Age: {0}",e.Age); // Prints 29 } 为什么呢 ++e.Age; 工作?我做了一些搜索,发现了Properties – by value or by reference? 这篇文章有一个答案:
(我对值类型和引用类型有很好的理解,因此我的困惑). 现在,如果确实如此 e.Age 返回m_age的副本(int是值类型),我们不会将增量应用于副本吗? 或者……以下是真的吗? ++e.Age; 完全相同/被翻译成 e.Age = e.Age + 1 只有这样 ++e.Age; 返回一个值(e.Age增加后的值),而 e.Age = e.Age + 1 是一个赋值,并不返回一个值(例如C会做). 解决方法
除非重新定义,否则运算符将再次获取,修改和设置该值.
检查这个的一个好方法是定义get和set并在调试模式下完成.对于递增和递减运算符,此行为也是detailed in the C# specification. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |