在C#中,當你聲明,但不使用內置類或結構,你得到一個「聲明,但從未使用過」警告,即使該變量賦值,如下面的代碼:爲什麼用戶定義的類沒有「聲明但未使用」警告?
string myStr;
myStr = "foo";
return;
但是你沒有得到一個用戶定義的類或結構相同的警告:
Bar myBar;
myBar = new Bar();
return;
爲什麼會出現在後一種情況下,沒有警告?如果構造函數存在副作用,那麼可以說new Bar();
,並且分配操作符過載時,分配的副作用的唯一方法是。但是,Visual Studio可以檢查這一點,如果操作符沒有超載,則發出警告,但事實並非如此。有沒有技術上的原因,爲什麼它不這樣做?
我認爲這隻適用於值類型。 – Transcendent
賦值運算符不能被重載,儘管您可以定義隱式轉換運算符。順便說一下,運行時間不是編譯時間。並非所有的東西都可以在編譯時確定。所以不要期望編譯器提供超級智能建議 –
是的,運行時間與編譯時間是答案。除非您編寫它,否則您不知道類將在運行時執行什麼操作。編譯器沒有寫它 - 它應該怎麼知道你沒有在構造器中做一些時髦的東西,或者DI系統不會自動實例化你的類型,或者你沒有需要初始化的靜態構造函數,以便即使沒有使用返回值,new Blah()也是有用的? – Charleh