我想知道以下内容之间有什么区别,哪种方式最好:
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,请记住这只是一个例子,我的观点是看看哪种方式更好地实例化实例变量
答案 0 :(得分:4)
都不是。
除非您有实际处置资源,否则不应实施IDisposable
只需在null
中将字段设置为Dispose()
几乎总是无用的。
回答这个问题,没关系 您应该使用更简单,更简单的第一版。
答案 1 :(得分:1)
ClassB
是否是一次性的?如果是这样,那么你应该处理它而不是将其设置为null
。 ClassA
是否有其他一次性资源?如果是这样,他们应该被处置。如果没有任何可处理的内容,则无需实施IDisposable
。
仅仅因为ClassA
实施处置并不意味着在这种情况下可以处理任何事情。事情也必须实现它。此外,如果您实际实施IDisposable
,则会有recognised pattern for doing so。
答案 2 :(得分:1)
第一个示例中的代码将由编译器转换为第二个示例中的代码。当你初始化定义它们的实例变量时,它实际上将初始化移动到构造函数的顶部(或者在构造函数之前的其他方法,这实际上是同样的事情)。
有些时候你不能做第一种情况(你所分配的东西太复杂,或依赖于尚不存在的数据)。但除此之外,这只是个人偏好。通常最好避免将这两种技术混合在同一个类中,因为对于读者而言,这有点难以理解。