c# - 设置和实例化类级变量的正确方法是什么?

标签 c# java instantiation

(在 java 或 c# 中)之间是否有区别:

public class Foo {
  Bar1 bar1;
  Bar2 bar2;

  public Foo(Bar1 bar1, Bar2 bar2) {
    this.bar1 = bar1;
    this.bar2 = bar2;
  }
}

public class Foo {
  Bar1 bar1 = null;
  Bar2 bar2 = null;

  public Foo(Bar1 bar1, Bar2 bar2) {
    this.bar1 = bar1;
    this.bar2 = bar2;
  }
}

对于对象,是否分配 null 应该无关紧要 - 它是隐式的,对吧?

我的老板坚持要为每个值分配 null。对于字符串,我理解分配 String str = "",因为那里有很大的不同,但我不太清楚为什么对象如此重要。

此外,执行以下操作是否是不好的做法:

public class Foo {
  Bar1 bar1 = new Bar1();
  Bar2 bar2 = new Bar2(); 

  public Foo(Bar1 bar1, Bar2 bar2) {
    this.bar1 = bar1;
    this.bar2 = bar2;
  }
}

最佳答案

无需显式将实例变量初始化为默认值。在 Java 和 C# 中,实例变量在创建实例时被赋予默认值。在构造函数主体运行之前,引用类型已经为 null。 int 已经是 0,等等。在第一个代码片段中,bar1 和 bar2 已经是 null。没有需要像第二个片段那样明确说明。

在第二个示例(第三个代码段)中,如果您所做的只是用构造函数中的另一个引用覆盖,则绝对没有必要将实例变量实例化为 new Bar1();

当构造函数尚未立即用提供的参数覆盖它时,默认值应该不是类型的默认值时,您可能希望将成员变量初始化为一个值。但是将它设置为默认值是多余的。但是,如果它可以帮助您的老板或团队的其他成员了解这些默认值是什么,那就这样吧。

关于c# - 设置和实例化类级变量的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8859686/

相关文章:

java - Thread.activeCount() 和 ThreadGroup.activeCount() 之间的区别

java - SMOreg 在 java 代码中花费了太多时间

c# - 如何在 C# 中将 JSON 数组(作为字符串)解析为 Dictionary<string,string>?

c# - 禁用 ASP.NET Core 输出路径中的 'RuntimeIdentifier' 子文件夹

java - 如何更改testng报告的css?

ios - 如何创建其基类具有 Storyboard 的子类 View Controller ?

java - 在 Java 中以简短的方式在数组中查找整数

c# - 无法加载文件或程序集 'System.EnterpriseServices.Wrapper.dll'

java - 创建用于发送电子邮件的后台线程

C# 通过反射获取属性