3

我想知道以下方法之间有什么区别,哪种方法是最好的方法:

public class ClassA
{
    public ClassB myClass = new ClassB();

    public void MethodA()
    {
         myClass.SomeMethod();
    }
}

或这个:

public class ClassA
{
    public ClassB myClass = null;

    public ClassA()
    {
        myClass = new ClassB();
    }        

    public void MethodA()
    {
         myClass.SomeMethod();
    }
}

编辑

我删除了 IDisposable,记住这只是一个例子,我的意思是看看哪种方式更适合实例化实例变量

4

3 回答 3

4

两者都不。

IDisposable除非您有实际资源可供处置,否则您不应实施。
简单地将字段设置为nullinDispose()几乎总是无用的。

要回答这个问题,没关系。
您应该使用更短、更简单的第一个版本。

于 2012-04-11T17:39:31.920 回答
1

ClassB一次性的吗?如果是这样,那么您应该处理它而不是将其设置为null. 有没有ClassA其他一次性的资源?如果是这样,它们应该被处理掉。如果没有什么可处置的,那么您无需实施IDisposable.

仅仅因为ClassA实现处置并不意味着在这种情况下可以处置任何东西。事情也必须实施。此外,如果您实际上是在实施,IDisposable那么有一个公认的模式可以这样做

于 2012-04-11T17:41:31.910 回答
1

第一个示例中的代码将由编译器转换为第二个示例中的代码。当您在定义它们的位置初始化实例变量时,它实际上将该初始化移动到构造函数的顶部(或构造函数之前的其他方法,这实际上是同一件事)。

有时您无法执行第一种情况(您分配的内容太复杂,或者依赖于尚不存在的数据)。但除此之外,这只是个人喜好。不过,通常最好避免在同一个课程中混合使用这两种技术,因为这对于读者来说有点难以理解。

于 2012-04-11T18:07:48.420 回答