静态成员与实例无关,而是与类型本身有关。
但我想知道:
如果我有这门课:
public class A
{
...
public static int MyInt{get;set;}
...
}
我当然可以创造new A()
但我的问题是:
- “卡在”类型本身的静态成员是否会阻止实例被 GC 处理?
静态成员与实例无关,而是与类型本身有关。
但我想知道:
如果我有这门课:
public class A
{
...
public static int MyInt{get;set;}
...
}
我当然可以创造new A()
但我的问题是:
不必要。静态成员属于类本身,CLR 将其保存为Type
对象。如果静态成员是 type 的对象A
,则静态成员可以防止该特定实例A
被垃圾收集。
public class Example
{
// this particular instance of Example will not be collected
private static readonly Example Default = new Example();
public void Foo()
{
// this instance *can* be collected after Foo returns
Example anotherInstance = new Example();
}
}
此行为对于某些不一定是单例但确实具有无状态的“默认”行为的类很有用。我使用它的一个例子是ParseTreeWalker.Default
ANTLR 4 项目的 C# 运行时库中的字段。如果您需要默认行为,您可以使用该实例而不创建新对象,但您也可以选择创建自己的类的实例,ParseTreeWalker
以添加您自己的行为。
不,不是的。这可以通过覆盖终结器来轻松显示。