类级变量/对象是否可接受?

时间:2012-03-19 17:39:15

标签: 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)
     }
}         

4 个答案:

答案 0 :(得分:2)

首先,您所指的内容通常称为globallocal变量。

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

然而,正如许多人所说,它不应该真的在这里或多或少。但是,这又是一个简单的例子。全局变量可能很危险,并且通常可以避免,因为它们可以在类中的任何位置进行修改。如果一个方法需要某个值然后被覆盖,那么这可能会导致在更复杂的示例中难以调试问题

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

  

他们通常被认为是不好的做法,正是因为他们的   非本地化:可以从中修改全局变量   任何地方(除非它们位于受保护的内存中或其他地方   呈现为只读),程序的任何部分都可能依赖于它

要摆脱全局变量,你可以这样做(使用对象初始化器)

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

答案 1 :(得分:1)

没关系。

对您网页的每个请求都是独立的,并且不了解其他请求,因此不存在与其他请求“冲突”的可能性。

答案 2 :(得分:1)

将用户特定数据作为ASP.Net Page实例中的字段完全可以。每次访问页面都会创建Page类的新实例,因此您不会在用户之间错误共享数据的情况下结束

答案 3 :(得分:0)

这很好,因为每个用户都创建了新类(ASP.NET设计)。它也在单独的线程中,因此即使是静态变量也可以接受。

干杯,伊万