了解使用访问器的不同方法

时间:2014-04-12 23:38:02

标签: c# properties

对于在类

中声明为static的对象sellprint
private static string sellprint  = "";

public string Sellprint
{
    get { return sellprint; }            
}
public void SetSellprint(string x)
{
      sellprint = x;
}

这是怎么回事 与

不同
public string Sellprint
{
    get; set;
}

内部。

我在msdn上找不到代码1的任何示例。它转化为什么?

2 个答案:

答案 0 :(得分:1)

编译器在第一个返回sellprint字段值的代码中为您的属性创建 getter 方法,因为您只实现了 getter 方法。第二个代码, getter setter 方法,由编译器和后台字段创建。这就是区别。

您可以使用ILDASM.exe验证:

首先,请考虑以下代码:

class Foo
{
    private string _value;

    public string Value
    {
        get { return _value; }
    }

    public void SetValue(string str)
    {
        _value = str;
    }
}

enter image description here

正如您所看到的,编译器只生成了一种get_Value

如果我们这样更改并将Value设为自动实现的属性:

class Foo
{
    public string Value { get; set; }
}

enter image description here

您可以看到编译器同时创建了 getter get_Value)和 setter set_Value)方法,并创建了{{1} }属性的支持字段。

没有专业缺点关于功能,除了在第二个代码中,您使用 less 代码执行相同的工作。

答案 1 :(得分:0)

1)不应该工作,因为没有销售图 - 假设你有一个名为sellprint的字段而忘记在你的代码片段中,你提供了一个get访问器和一个方法而不是set访问器,这有点奇怪。

2)将自动创建所需的字段(并且不会告诉您名称,因此您不会意外地使用它)

但这两者之间没有区别。