初始化实例变量
本文关键字:变量 实例 初始化 | 更新日期: 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
那么有一个公认的模式。
编译器会将第一个示例中的代码转换为第二个示例中的代码。 当您在定义实例变量的位置初始化实例变量时,它实际上将该初始化移动到构造函数的顶部(或构造函数之前的其他方法,这实际上是一回事)。
有时您无法执行第一种情况(您分配的内容太复杂,或者依赖于尚不存在的数据)。 但除此之外,这只是个人喜好。 不过,通常最好避免在同一类中混合这两种技术,因为对于读者来说,这有点难以理解。