如果我的某个课程没有标记为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");
这是在生产中。
答案 0 :(得分:3)
不,非静态类包含静态成员是完全合理的。
Static classes没有任何实例构造函数。默认情况下,非静态类具有公共实例构造函数,但您可以使用私有实例构造函数阻止“从外部”实例化。
编辑:ASP.NET用户会话与.NET中的内存管理几乎没有关系,除非某些数据肯定存储在他们的会话中 - 基本上只是充当对该对象的强引用。静态变量将阻止它所引用的对象在其AppDomain
部分仍处于活动状态时被垃圾收集。
关于customers
变量 - 这只会阻止List<CustUser>
被垃圾收集,只要变量被认为是“实时” - 这将取决于它是什么类型的变量以及它是如何变量的被使用。