具有静态成员和公共构造函数的类是静态类吗?

时间:2011-08-22 18:06:30

标签: c#

如果我的某个课程没有标记为static,但它确实有static个成员变量,那么这个类本身是否为static?它正在代码中使用,但它有一个公共构造函数。我以为他们只能拥有私人建筑师?

此外,在网页中的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");

这是在生产中。

1 个答案:

答案 0 :(得分:3)

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

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

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

静态变量将阻止它所引用的对象在其AppDomain部分仍处于活动状态时被垃圾收集。

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