C# 4 で修正されたバグにより、次のプログラムは を出力しますtrue
。(LINQPad で試してください)
void Main() { new Derived(); }
class Base {
public Base(Func<string> valueMaker) { Console.WriteLine(valueMaker()); }
}
class Derived : Base {
string CheckNull() { return "Am I null? " + (this == null); }
public Derived() : base(() => CheckNull()) { }
}
VS2008 のリリース モードでは、InvalidProgramException がスローされます。(デバッグ モードでは正常に動作します)
VS2010 Beta 2ではコンパイルできません(Beta 1は試していません)。私は苦労してそれを知りました。
this == null
純粋な C# で作成する他の方法はありますか?
ベストアンサー1
この観察はStackOverflowに投稿されました。別の質問今日は先ほど。
マークのその質問に対する素晴らしい答え仕様 (セクション 7.5.7) によれば、そのコンテキストではアクセスできないはずでありthis
、C# 3.0 コンパイラでこれを行う機能はバグであることを示しています。C# 4.0 コンパイラは仕様に従って正しく動作しています (ベータ 1 でも、これはコンパイル時エラーです)。
§ 7.5.7 このアクセス
あこのアクセス予約語 で構成されます
this
。このアクセス:
this
あこのアクセスのみ許可されていますブロックインスタンス コンストラクター、インスタンス メソッド、またはインスタンス アクセサー。