C#属性的正确语法

本文关键字:语法 属性 | 更新日期: 2023-09-27 17:59:03

根据MSDN文档,使用以下语法:

// 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;
    }
}

在MSDN上显示的较短示例中,什么时候使用ViewState语法比较合适?

C#属性的正确语法

ViewState是ASP.Net服务器控件的一个功能,可在回发过程中持久保存信息。

对于不在服务器控件中的简单属性,您应该使用自动实现的属性:

public string Name { get; set; }

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

因此,只有当您谈论启用了视图状态的ASP控件时,第二种情况才可能出现,这是所有可能情况的一个子集。

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/sette的主体中会发生什么完全取决于您。没有"对"或"错":这取决于程序的需要。

相对于ViewStateViewState是ASP.Net的一部分,它与属性的关系不大。您的示例只是将ViewState项公开为公共读/写属性。

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

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

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