c# - 类级变量/对象是否可以接受?

标签 c# asp.net

我有一个使用 asp.net 构建的简单网站。它通常一次只有 1 或 2 个用户。我的问题是,在类级别实例化一个类是否可以,或者我应该为每个方法实例化。这是一个例子。我有一个名为 Host 的类,带有名称字段和 mac 字段。在我针对特定页面的代码中,是否可以这样做:

public partial class addhosts : Page
{
     private Host host = new Host();
     private HostDal dal = new HostDal();

     protected void myMethod()
     {
          host.Name = "myname"
          host.Mac = "mymac"
     }

     protected void btnSubmit_Click(object sender, EventArgs e)
     {
          dal.AddHost(host)
     }
}         

最佳答案

首先,您所指的通常是 globallocal 变量。

在您列出的简单情况下,最好在提交点击时创建变量。原因是如果用户加载对象,但从未调用提交点击,那么您在不需要时在内存中实例化了宿主对象。

但是,正如许多人所说,这里应该真的不管怎样。但是,这又是一个简单的例子。全局变量可能是危险的并且经常被避免,因为它们可以在你的类中的任何地方被修改。如果一个方法期望某个值然后被覆盖,这可能会导致更复杂的示例中难以调试的问题

Here is a wikipedia article这重申了我的上述观点:

They are usually considered bad practice precisely because of their non-locality: a global variable can potentially be modified from anywhere (unless they reside in protected memory or are otherwise rendered read-only), and any part of the program may depend on it

要摆脱全局变量,您可以这样做(使用对象初始值设定项)

protected void btnSubmit_Click(object sender, EventArgs e)
{
      var host = new Host
          {
              Name = "myname",
              Mac = "mymac"
          };
      dal.AddHost(host)
}

关于c# - 类级变量/对象是否可以接受?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9775067/

相关文章:

c# - 在 ASP.NET Core WebAPI 中实现 JSON 合并补丁

asp.net - 凭据未在生产服务器中的 WCF 调用中传递

c# - 找不到 DinkToPdf dll libwkhtmltox

c# - 所有复选框的单个事件处理程序

c# - LightInject 不解析继承的泛型类型

c# - SagePay 直接支付集成 C#

javascript - 当 "onsubmit"事件调用 Javascript 函数时,没有提交 asp.net 表单

c# - WebApi 500 内部服务器错误

c# - 更改服务器上的 SSL 证书是否会破坏代码?

c# - 传递流(中间不必保存到内存)