asp.net web控件的公共属性保存在哪里?
本文关键字:属性 保存 在哪里 net web 控件 asp | 更新日期: 2023-09-27 18:13:56
我有一个web控件派生自另一个web控件(在本例中为GridView)。当我给web控件添加新属性时,比如
public string name {get;set;}
属性是否被保存在某处?如果是,它是自动存储在控制状态中,还是需要重写SaveControlState函数…
我能够确定应用程序的行为,但想知道正确的实现。
还有一些其他的方法,但超出了这个问题的范围,参见下面:
//stores it in memory
public string name {get;set;}
//viewstate backed property, preserved on postback when viewstate is enabled
public string name {
get
{
return (string)ViewState["name "] ?? String.Empty; //default value
}
set
{
ViewState["name "] = value;
}
}
以这种方式声明的属性由编译器创建的私有字段支持。它们只在类的生命周期内存在。
如果您希望在回发之间持久化,请使用ViewState作为后备存储。正如您建议的那样,您也可以重写控件状态方法,但是ViewState可能更简单。
ETA: Schott先生在他的回复中有一个使用ViewState的好例子。
你说的"Is that property being saved somewhere "是什么意思?如果你将属性添加到你的类中,那么它就是你的类的成员,并且被包含在该类实例作用域的堆中。
你只是在问自动实现属性的语法吗?当你这样写:
public string name {get;set;}
它真的只是语法糖。当代码被执行时,编译器已经把它变成了类似这样的东西:
private string _name;
public string name
{
get
{
return _name;
}
set
{
_name = value;
}
}
自动实现属性只是一种减少需要输入的代码量的方法,允许您专注于您试图表达的内容,而不必将其包装在太多的语言开销中,这对代码的表达性没有真正的贡献。最终结果与手动实现整个属性完全相同,如果您不需要向属性添加任何自定义逻辑,这只是一种快捷方式。