0

和有什么区别

private string someText;

public string SomeText
{
    get;
    set;
}

public string SomeText
{
    get;
    set;
}
4

4 回答 4

3

什么都没有,您的私人会员没有被使用。

编译器将编译

public string SomeText
{
     get;
     set;
}

相当于

private string _someText;

public string SomeText
{
   get { return _someText; }
   set { _someText = value; }
}
于 2013-10-16T00:42:11.900 回答
2

您确实意识到您的问题是比较两个相同的事物吗?(

public string SomeText
{
    get;
    set;
}

)

我在想你的问题到底是什么 - 有什么区别

private string someText;

public string SomeText
{
    get
     {
       return someText;
     }

    set 
     {
      someText = value;
     }
}

和 :

public string SomeText
{
    get;
    set;
}

答案是,在第二个示例中,支持字段仍然存在,但是是为您创建的 - 您对设置/获取没有影响;而在第一个示例中,您可以进行其他检查以确保它是设置的有效值等。

于 2013-10-16T00:46:09.490 回答
2

我想也许你想知道两者之间的区别

public class Test1
{
    private string _text;
    public string Text
    {
        get { return _text; }
        set { _text = value; }
    }
}

 public class Test2
{
    public string Text
    {
        get;
        set;
    }
}

如果你将这两个类反汇编成 CIL,你会发现它几乎是一样的,除了在第二种情况下,该字段是一个自动生成的字段。

第一种情况:

.property instance string Text
{
    .get instance string Syner.Test1::get_Text()
    .set instance void Syner.Test1::set_Text(string)
}


.field private string _text

第二种情况:

 .property instance string Text
{
    .get instance string Syner.Test2::get_Text()
    .set instance void Syner.Test2::set_Text(string)
}


.field private string <Text>k__BackingField
{
    .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
}
于 2013-10-16T00:47:47.617 回答
1

第二个只是语法糖:

private string someText;

public string SomeText
{
    get { return someText; }
    set { someText = value; }
}

第二个自动在幕后为您处理变量创建等。在您的第一个示例中,私有变量someText永远不会被读取/修改,它只是一个不执行任何操作的类级别变量。

您可能想要使用第一个的原因是如果您需要在 getter/setter 中做一些更复杂的事情。例如,您可能想检查是否在 getter 中初始化了某些内容。或者您可能想要验证 setter 中的值。

于 2013-10-16T00:43:53.110 回答