如果每个构造函数都没有初始化给定的成员,有没有办法导致错误?也许是const的东西?
我想要这个,因为我有一堆代码,因为错误计算成员值而导致错误。我真正想要做的是删除整个混乱,并在重做时遵循编译器的主导(编写使用最终结果的代码,修复使用不存在的代码的错误,修复错误等)。这不起作用的一步是成员变量,因为我没有被迫在构造函数中初始化它们,就像我对局部变量一样。
答案 0 :(得分:3)
不幸的是,C#没有提供这样的内置谓词。您可以做的最好的事情是编写一个方法来检查有问题的对象是否为null或一些预先确定的标志值,并在每个构造函数的末尾和/或每个引用该对象的方法的顶部进行调用。
答案 1 :(得分:1)
支持。例如:
class Test {
int notAssigned;
void method() {
// Use it, but don't initialize it
int ix = notAssigned;
}
}
产地:
警告CS0649:字段'ConsoleApplication1.Test.notAssigned'永远不会分配给,并且始终具有默认值0
要将其变为错误,请使用“项目+属性”,“构建”选项卡,将警告视为错误。
答案 2 :(得分:1)
我认为没有办法让编译器抱怨未初始化的成员,前提是该成员至少在一个案例中初始化。但是,如果所有值都有明确的默认值,则可以使用默认构造函数来确保所有成员都初始化为其默认值,并从所有重载的构造函数继承默认构造函数。
public class Foo
{
private int val1;
private List<int> list;
public Foo()
{
//could also be a private constructor if that's appropriate
//all default initialization
val1 = 1;
list = new List<int>();
}
public Foo(int nonDefaultValue1) : this()
{
//set inputted value
val1 = nonDefaultValue1;
//no need to initialize list, done by default constructor
}
}
答案 3 :(得分:1)
听起来像StyleCop可以帮助你当然必须建立你的自定义规则
答案 4 :(得分:0)
提示:在Visual Studio中,学习使用Shift + F12(查找所有引用)。非常方便找到那些改变状态的引用。