静态成员不是关于实例而是关于类型本身。
但我想知道:
如果我有这门课程:
public class A
{
...
public static int MyInt{get;set;}
...
}
我可以创建new A()
但我的问题是:
答案 0 :(得分:10)
不一定。静态成员属于类本身,CLR将其保留为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();
}
}
此行为对于某些类非常有用,这些类不一定是单例,但具有无状态的“默认”行为。我使用它的一个例子是ANTLR 4项目的C#运行时库中的ParseTreeWalker.Default
字段。如果您需要默认行为,则可以在不创建新对象的情况下使用该实例,但您也可以选择创建自己的扩展ParseTreeWalker
类的实例来添加自己的行为。
答案 1 :(得分:2)
不,它没有。通过覆盖终结器可以很容易地显示出来。