加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#,使用运算符对通过属性获取的值(get)

发布时间:2020-12-15 23:28:51 所属栏目:百科 来源:网络整理
导读:在C#中,我们定义一个属性如下: // m_age is a private int in the class Employeepublic int Age{ get {return m_age;} set {m_age = value;}} 现在,当我这样做 static void Main(){ Employee e = new Employee(age: 28); // Create new Employee System.Co
在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?

这篇文章有一个答案:

Technically it’s always by value,but you have to understand what is being passed. Since it’s a reference type,you are passing a reference back (but by value).

Hope that makes sense. You always pass the result back by value,but if the type is a reference you are passing the reference back by value,which means you can change the object,but not which object it refers to.

(我对值类型和引用类型有很好的理解,因此我的困惑).

现在,如果确实如此

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读