このようなクラスのコンストラクターのパラメーターとしてデリゲートを渡そうとしています
class Foo
{
protected delegate void CreateResource(object parameter);
protected Foo(CreateResource res)
{
}
public Foo(string resourceName)
: this(CreateStreamRes) // Compiler error
{
}
protected void CreateStreamRes(object o)
{
}
}
しかし、コメント行に次のコンパイラエラーが表示されます:「非静的フィールド、メソッド、またはプロパティ'CreateStreamRes(object)'にはオブジェクト参照が必要です」。
ただし、このようにコンストラクター内に変数を追加すると、
public Foo(string resourceName)
: this(CreateStreamRes) // Compiler error
{
CreateResource cr = CreateStreamRes; // OK
}
その行を正常にコンパイルします。
C#はコンストラクターを静的メソッドとして扱っているようです。なぜなら、静的キーワードをCreateStreamRes(object o)メソッドに追加すると、うまくコンパイルされるからです。
なぜこれが起こっているのか誰かが私に説明できますか?