访问静态成员是否会调用基类构造函数?

时间:2014-02-03 15:37:59

标签: c# .net entity-framework garbage-collection clr

即使所有常识都说不,我仍然会问这个问题只是为了得到第二个意见并确定。

如果我有这样的类层次结构:

public class IntermediateObjectContext : System.Data.Objects.ObjectContext
{
    public static Action<string> PrintHello { get; set; }
}

public class MyDatabaseContext : IntermediateObjectContext
{
    public ObjectSet<Foo> Foos
    {
      get { // ... }
    }
}

然后从与Entity Framework对象无关的第三个,如果我访问IntermediateObjectContext类的静态成员,在这种情况下,如果我订阅该类的委托,是否会以某种方式实例化一个新的ObjectContext?

class SomeClass
{
    public void SomeMethod()
    {
      IntermediateObjectContext.PrintHello += SayHello;
    }

    public void SayHello(string s)
    {
        Debug.Print(s);
    }
}

所有理由都说不,常识说它不会,但我只想确定。我正在尝试追踪记忆hogger对象。

如果

会发生什么

如果我有SomeClass类型的静态集合,那么内存情况会发生什么:

public class SomeClassCollection
{
    private static Collection<SomeClass> _col = 
                new Collection<SomeClass>();

    public void Add(SomeClass c) { _col.Add(c); }

    public void Remove(SomeClass c) { _col.Remove(c); }
}

然后一些代码将SomeClass个实例添加到SomeClassCollection中,如下所示:

public SomeClassCollectionConfig
{
    public static RegisterSomeClasses()
    {
        SomeClassCollection.Add(new SomeClass());

        SomeClassCollection.Add(new DerivesClassOfSomeClass());
    }
}

1 个答案:

答案 0 :(得分:3)

(1)不,它不会实例化一个对象。

(2)如果出现以下情况:

在第一次访问col的任何成员时,它将分配空集合SomeClassCollection

从代码中,这就是它所能做的一切。您未在所提供的代码中的任何位置使用_col