繁体   English   中英

asp.net Web控件的公共属性保存在哪里?

[英]Where is the public properties of a asp.net web control saved?

我有一个从另一个Web控件(在本例中为GridView)派生的Web控件。 当我向该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的一个很好的例子。

“该财产是否保存在某个地方?”是什么意思? 如果将属性添加到类中,则它是类的成员,并且包含在该类实例的作用域中的堆中。

您只是在询问自动实现属性的语法吗? 当您编写此代码时:

public string name {get;set;}

它实际上只是语法糖。 在执行代码时,编译器已将其转换为以下形式:

private string _name;
public string name
{
    get
    {
        return _name;
    }
    set
    {
        _name = value;
    }
}

自动实现的属性只是一个方式,以减少的代码,你需要输入量,让你专注于你想表达,而不必把它包在这么多语言的开销并没有真正有助于表现是什么代码。 最终结果与手动实现整个属性完全相同,如果您不需要向该属性添加任何自定义逻辑,那只是捷径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM