我最近一直在用C#和Java编程,我很好奇最好的地方是初始化我的类字段.
我应该在申报时做到吗?:
public class Dice
{
private int topFace = 1;
private Random myRand = new Random();
public void Roll()
{
// ......
}
}
Run Code Online (Sandbox Code Playgroud)
或者在构造函数中?:
public class Dice
{
private int topFace;
private Random myRand;
public Dice()
{
topFace = 1;
myRand = new Random();
}
public void Roll()
{
// .....
}
}
Run Code Online (Sandbox Code Playgroud)
我真的很好奇你们有些人认为最好的做法.我想保持一致并坚持一种方法.
kok*_*kos 294
我的规则:
null,false,0,0.0...).Qui*_*ome 148
在C#中没关系.您提供的两个代码示例完全相同.在第一个例子中,C#编译器(或它是CLR?)将构造一个空构造函数并初始化变量,就像它们在构造函数中一样.如果已有构造函数,则"上方"的任何初始化将被移动到其顶部.
就最佳实践而言,前者比后者更不容易出错,因为有人可能很容易添加另一个构造函数并忘记链接它.
Tom*_*ine 15
C#的语义与Java略有不同.在C#中,声明中的赋值是在调用超类构造函数之前执行的.在Java中,它立即完成,允许使用'this'(对匿名内部类特别有用),并且意味着两个表单的语义确实匹配.
如果可以,请将字段设为最终字段.
xji*_*xji 14
我认为有一点需要注意.我曾经犯过这样一个错误:在派生类中,我试图"初始化声明"从抽象基类继承的字段.结果是存在两组字段,一组是"base",另一组是新声明的字段,调试花了我一些时间.
教训:要初始化继承的字段,你可以在构造函数中完成.
在 Java 中,带有声明的初始化器意味着该字段始终以相同的方式初始化,无论使用哪个构造函数(如果有多个)或构造函数的参数(如果它们有参数),尽管构造函数可能随后更改值(如果不是最终值)。因此,使用带有声明的初始值设定项向读者表明,初始化值是该字段在所有情况下都具有的值,无论使用哪个构造函数,也无论传递给任何构造函数的参数如何。因此,仅当且始终当所有构造对象的值相同时才使用带有声明的初始值设定项。
假设您的示例中的类型,肯定更喜欢初始化构造函数中的字段.特殊情况是:
我总是将类顶部的字段列表视为目录(此处包含的内容,而不是如何使用),以及构造函数作为简介.方法当然是章节.
有许多不同的情况。
我只需要一个空列表
情况很清楚。我只需要准备我的列表并防止在有人向列表中添加项目时抛出异常。
public class CsvFile
{
private List<CsvRow> lines = new List<CsvRow>();
public CsvFile()
{
}
}
Run Code Online (Sandbox Code Playgroud)
我知道价值观
我完全知道默认情况下我想要什么值,或者我需要使用其他一些逻辑。
public class AdminTeam
{
private List<string> usernames;
public AdminTeam()
{
usernames = new List<string>() {"usernameA", "usernameB"};
}
}
Run Code Online (Sandbox Code Playgroud)
或者
public class AdminTeam
{
private List<string> usernames;
public AdminTeam()
{
usernames = GetDefaultUsers(2);
}
}
Run Code Online (Sandbox Code Playgroud)
具有可能值的空列表
有时我希望默认情况下有一个空列表,可以通过另一个构造函数添加值。
public class AdminTeam
{
private List<string> usernames = new List<string>();
public AdminTeam()
{
}
public AdminTeam(List<string> admins)
{
admins.ForEach(x => usernames.Add(x));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
127894 次 |
| 最近记录: |