ASP.NET 设置和获取属性中的视图状态

有人可以解释我下面写的代码吗

 public IList<GetProductPrice> CurrentPage
    {
        get { return ViewState["CurrentPage"] as List<GetProductPrice>; }
        set { ViewState["CurrentPage"] = value; }
    }
乔尔·哈克斯

它被称为属性。它们在编译时生成 getter 和 setter 函数:

List<GetProductPrice> GetCurrentPage(){ 
    return ViewState["CurrentPage"] as List<GetProductPrice>; 
}
void SetCurrentPage(List<GetProductPrice> value) { 
     ViewState["CurrentPage"] = value; 
}
//i think its actual get_.. but it doesn't matter for the example 

因此,它生成了易于使用的 getter setter。您可以使用以下方法调用:

 var test = CurrentPage; //compiled to var test = GetCurrenctPage();
 CurrentPage = test; //compiled to SetCurrentPage(test);

如果您像这样将 getter 和 setter 留空:

public int CurrentPage
{
    get;
    set;
}

它还将在存储数据的类上生成一个支持字段:

private int _currentPage;
public GetCurrentPage(){ return _currentPage }
public SetCurrentPage(int value) { _currentPage = value }

我们为什么要做这个?

使用 getter 和 setter 是来自 java 的一个非常古老的最佳实践(ide 可以选择生成它们)。但这会导致大量样板代码!

在 C# 中,他们试图通过添加这些属性来解决这个问题。但是为什么我们需要 getter 和 setter 呢?例如,如果您想在值更改时收到通知(将其自身标记为脏类)。我认为实体框架使用它来跟踪模型是否发生更改,否则它不会进行数据库更新调用。还有其他有用的工具可以在编译时在属性中注入代码。添加额外的功能。

如何不使用它:

使用属性返回HttpContext.Current是危险的,因为你暗中依赖,HttpContext所以任何时候都尽量不要这样做!

通常,当 get 或 set 中的代码非常繁重(非常密集)时,使用它也是不好的做法。这是不好的做法,因为使用该代码的其他人可能认为他只是设置了一个属性/字段,而实际上执行了一些非常繁重的代码。最好的做法是为此创建一个特殊的函数并私有 getter/setter:

 public int Property {get; private set; }
 public SetProperty(int value){
     //intensive code here:
     Property = value;
 }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在jquery中获取和设置ASP.NET属性

来自分类Dev

在.NET 4.5.1中设置ASP.NET Identity ConnectionString属性

来自分类Dev

如何在ASP.NET MVC中获取视图路径

来自分类Dev

ASP.Net生命周期和控制状态以及视图状态

来自分类Dev

ASP.NET MVC读写设置属性

来自分类Dev

如何从ASP / vb.net中获取html属性

来自分类Dev

如何从ASP / vb.net中获取html属性

来自分类Dev

在ASP.NET中设置SameSite = None和安全

来自分类Dev

ASP.net 中的设置和 API(URL 问题?)

来自分类Dev

在asp.net中显示多个视图

来自分类Dev

在Asp.net中获取地址的经度和纬度?

来自分类Dev

在asp.net 5中获取和存储文件的路径

来自分类Dev

角色 asp.net 设置

来自分类Dev

在 ASP.NET 中设置日常工作

来自分类Dev

在视图中设置ASP.NET MVC ViewBag属性的单元测试

来自分类Dev

我可以在ASP.NET视图中设置ViewBag属性吗?

来自分类Dev

ASP.NET Core中的属性

来自分类Dev

ASP.NET中的调试属性路由

来自分类Dev

ASp.net vnext中的AssemblyNeutral属性

来自分类Dev

在asp.net属性中访问数据

来自分类Dev

ASP.NET Core中的属性注入

来自分类Dev

更改ASP.NET中的默认属性

来自分类Dev

在asp.net属性中访问数据

来自分类Dev

ASp.net vnext中的AssemblyNeutral属性

来自分类Dev

ASP.NET Core中的属性

来自分类Dev

ASP .Net VNext和Owin

来自分类Dev

没有使用Service Fabric和Asp.net Core 1.0 WebApi无状态服务为项目'ClassLibrary1.csproj'设置OutputPath属性

来自分类Dev

自动将DateTime属性的日期时间值设置为asp.net模型中的当前日期和时间

来自分类Dev

在ASP.NET中获取缓存的控件