在C#中,当你声明,但不使用内置类或结构,你得到一个“声明,但从未使用过”警告,即使该变量赋值,如下面的代码:为什么用户定义的类没有“声明但未使用”警告?
string myStr;
myStr = "foo";
return;
但是你没有得到一个用户定义的类或结构相同的警告:
Bar myBar;
myBar = new Bar();
return;
为什么会出现在后一种情况下,没有警告?如果构造函数存在副作用,那么可以说new Bar();
,并且分配操作符过载时,分配的副作用的唯一方法是。但是,Visual Studio可以检查这一点,如果操作符没有超载,则发出警告,但事实并非如此。有没有技术上的原因,为什么它不这样做?
我认为这只适用于值类型。 – Transcendent
赋值运算符不能被重载,尽管您可以定义隐式转换运算符。顺便说一下,运行时间不是编译时间。并非所有的东西都可以在编译时确定。所以不要期望编译器提供超级智能建议 –
是的,运行时间与编译时间是答案。除非您编写它,否则您不知道类将在运行时执行什么操作。编译器没有写它 - 它应该怎么知道你没有在构造器中做一些时髦的东西,或者DI系统不会自动实例化你的类型,或者你没有需要初始化的静态构造函数,以便即使没有使用返回值,new Blah()也是有用的? – Charleh