C#属性的正确语法

时间:2011-06-14 16:47:24

标签: c# asp.net visual-studio visual-studio-2010

根据MSDN documentation,使用以下语法:

// A read-write instance property:
public string Name
{
    get { return name; }
    set { name = value; }
}

但是,VS2010会自动为新库类生成以下代码:

public string Name
{
    get
    {
        String s = (String)ViewState["Name"];
        return ((s == null) ? String.Empty : s);
    }

    set
    {
        ViewState["Name"] = value;
    }
}

何时使用ViewState语法而不是MSDN上显示的较短示例?

4 个答案:

答案 0 :(得分:8)

ViewState是ASP.Net服务器控件的一项功能,可以在回发中保留信息。

对于不在服务器控件中的简单属性,您应该使用auto-implemented property

public string Name { get; set; }

答案 1 :(得分:2)

第一个将值存储在类中的私有属性字段中,而第二个(尝试)将实际值存储在ViewState中。

所以只有在你讨论启用了viewstate的ASP控件时才能实现第二个,这是所有可能情况的一个狭窄子集。

答案 2 :(得分:1)

C#属性只是一段语法糖。这个结构

public Foo MyValue { get ; private set ; }

就像你编码的那样:

private Foo _myValue ;
public Foo
{
  get
  {
    return _myValue ;
  }
  private set
  {
    this._myValue = value ;
  }
}

在任何一种情况下,实际生成的代码都是这样的:

private Foo _myValue ;
public Foo MyValue_get()
{
  return this._myValue ;
}
private Foo MyValue_set( Foo value )
{
  this._MyValue = value ;
}

如果您选择实例化自己的getter / setter,那么getter / setter主体中发生的事情完全取决于您。没有“正确”或错误:它取决于您的计划的需要。

关于ViewStateViewState是ASP.Net的一部分。它对这些属性的影响很小。您的示例只是将ViewState项公开为公共读/写属性。

答案 3 :(得分:0)

两者之间的区别在于,一个只是普通的旧C#属性,提供对类中(最可能)私有范围变量的访问。

另一个是返回从ASP.NET的ViewState恢复的值。

这些是完全不同的两件事。