未使用の構造体を削除しませんが、私は休閑コードを持ってなぜコンパイラがクラス
static void Main(string[] args)
{
var str = new DummyStruct();
var testClass = new DummyClass();
}
クラスまたは構造体のいずれも任意の実装を持っています。私は
private static void Main(string[] args)
{
new DummyClass();
}
を取得ILSpyを使用して、リリースビルドの後にコードを見たときにでも、だから私の質問は:なぜコンパイラは、クラスの1構造体のインスタンス化を無視するのではなく?
C#コンパイラは、デッドコードを削除することについてかなり控えめです。ジッターの仕事ですが、コードが実際に何をするかについてはもっと知っています。しかし、構造体の "デフォルトのコンストラクタ"にとっては簡単ではありません.C#やCLRではどちらも定義できません。 「新しい」と書くことは、それ自体かなり無駄ですが、C#の明確な割り当て規則に触発されています。たとえば、VB.NETやC++/CLIでは必要ありません。 –
@HansPassantこれは非常に有益なコメントです。ちょっとした研究の後、パラメータのないコンストラクタの作成を許可しないのはC#だということがわかりましたが、CLRの観点からは完全にOKです。あなたは何らかの機会に、その反対を示す文書を持っていますか? – trebor
Ecma-335章II.13.2、根拠括弧。 –