初始化实例变量

本文关键字:变量 实例 初始化 | 更新日期: 2023-09-27 18:30:50

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

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,请记住这只是一个例子,我的观点只是看看哪种方式更适合实例化实例变量

初始化实例变量

两者都不是。

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

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

ClassB一次性的吗?如果是这样,那么您应该处理它而不是将其设置为 null .ClassA是否有任何其他可丢弃的资源?如果是这样,则应将其处置。如果没有什么要处理的,那么你不需要实现IDisposable

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

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

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