我有一个用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)
}
}
答案 0 :(得分:2)
首先,您所指的内容通常称为global
与local
变量。
在您列出的简单情况下,最好在提交点击上创建变量。原因是如果用户加载了对象,但从不调用提交点击,那么在没有需要时你已经在内存中实例化了主机对象。
然而,正如许多人所说,它不应该真的在这里或多或少。但是,这又是一个简单的例子。全局变量可能很危险,并且通常可以避免,因为它们可以在类中的任何位置进行修改。如果一个方法需要某个值然后被覆盖,那么这可能会导致在更复杂的示例中难以调试问题
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设计)。它也在单独的线程中,因此即使是静态变量也可以接受。
干杯,伊万