根据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上显示的较短示例?
答案 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主体中发生的事情完全取决于您。没有“正确”或错误:它取决于您的计划的需要。
关于ViewState
,ViewState
是ASP.Net的一部分。它对这些属性的影响很小。您的示例只是将ViewState
项公开为公共读/写属性。
答案 3 :(得分:0)
两者之间的区别在于,一个只是普通的旧C#属性,提供对类中(最可能)私有范围变量的访问。
另一个是返回从ASP.NET的ViewState恢复的值。
这些是完全不同的两件事。