0

请看一下客户类的这个简单实现:

class Customer
{
    public double TotalPurchases { get; set; }
    public string Name { get; set; }
    public int CustomerID { get; set; }

    public Customer(double purchases, string name, int ID)
    {
        TotalPurchases = purchases;
        Name = name;
        CustomerID = ID;
    }
}

我注意到客户名称有一个获取和设置选项。假设我需要更改客户名称。

通过如下方法更改客户名称是否更容易接受:

public void changeName(string name)
{
    this.Name = name;
}
Customer cus = new Customer(5,"John",5005);
cus.changeName("Jim");

还是可以通过以下方式更改它:

cus.Name = "Jim";
4

3 回答 3

1

拥有改变属性的方法是不必要的。存在属性的原因是允许您围绕字段的访问实现额外的逻辑。本质上,该属性创建了一个私有字段并自动生成访问器/修改器方法。

属性 likepublic string Foo { get; set; } 等价于

private string foo;
public string Foo 
{
    get
    {
        return foo;
    }
    set
    {
        foo = value;
    }
}

因此,例如,您可以实现其他逻辑:

private string foo;
public string Foo 
{
    get
    {
        return foo.Trim();
    }
    set
    {
        if (value == "bar") 
        {
            throw new Exception("validation");
        }
        foo = value;
    }
}
于 2013-08-17T23:54:29.427 回答
1

如果设置 Name 属性会更改状态或执行您认为对客户类的用户不应该透明的操作,请使用方法方法。对其他一切使用属性方法。

于 2013-08-17T23:55:40.933 回答
0

您显然有 Java 背景(我也是 :-))。在 C#cus.Name = "Jim" ;中是绝对有效的。原因是看起来像是赋值的东西实际上是一个“setter”函数调用。这个函数可以用你想要的任何代码重新定义,但调用它的语法仍然是cus.Name = "Jim" ;.

这被称为引用一致性,这是一个真正可怜的 Java 不支持它。

于 2013-08-17T23:55:13.400 回答