2011-08-22 59 views
0

如果我有一个班级没有标记为static,但它确实有static成员变量,这是否使班级本身static?它像代码一样被使用,但它有一个公共构造函数。我认为他们只能拥有私人构造函数?是一个静态成员和一个公共构造函数静态类的类?

此外,在Web页面中的Web应用程序中,我调用静态类并将其分配给要在页面中使用的静态成员变量。如果用户离开页面,静态成员变量会保留在内存中吗?我正在考虑那个用户会话的持续时间,对吗?或者,GC是否会避免在更长一段时间内收集?

确定这里的一些代码:

public class CustomerManager 
{ 

    private static MyFactory _customerFactory = MyFactory.GetInstance(); 

    public CustomerManager() 
    { } 

    public static List<CustUser> GetCustomersByWebRequest(int iClientID, string sEmployeeNumber) 

它被称为另一个类,它是静态的,像这样:

List<CustUser> customers = CustomerManager.GetCustomersByWebRequest(1, "23434"); 

,这是在生产。

+2

您的问题并不清楚,因为您最初谈论的是一个非静态类,然后将其称为静态类... –

+0

确定已更新,以反映对非静态类的更好理解。 :)需要澄清与网络应用程序的内存管理。谢谢 – DotNetDude

回答

3

不,对于非静态类来说,包含静态成员是完全合理的。

Static classes没有任何实例构造函数。非静态类默认具有公共实例构造函数,但您可以使用私有实例构造函数“阻止”从外部实例化。

编辑:ASP.NET用户会话与.NET中的内存管理无关,除非某些数据肯定存储在他们的会话中 - 基本上只是充当对该对象的强引用。

静态变量将阻止它引用的对象被垃圾收集,而AppDomain它的一部分仍然存在。

关于customers变量 - 这只会防止作为变量被认为是“活的”,只要收集到的List<CustUser>是垃圾 - 这将取决于它是什么样的变量以及它如何被使用。

+2

静态类可以有静态私有构造函数。它是第一次将该类加载到内存中。 – Dani

+0

@Dani:虽然这不是它的正常含义的构造函数。当有人说“构造函数”而没有指定其他的时候,他们几乎总是指“实例构造函数”。请注意,您不能给静态构造函数*任何*访问修饰符,包括私有,所以“静态私有构造函数”没有多大意义。将编辑,使这绝对清楚,虽然... –

+0

嗨乔恩我添加了一些代码,让你更好地了解我的意思。 – DotNetDude

相关问题