C#のプロパティは、実際の単純な古いメソッドにコンパイルされることは誰でも知っています。しかし、method(-group)とは異なり、Func<T>
orまたはAction<T>
(getterおよびsetter)のようなデリゲートを期待する他のメソッドへの引数としてそれらを与えることはできません。これを禁止する特別なものはありますか、それともメソッドグループをデリゲートに暗黙的に変換可能にするときに「無料」で提供されなかった機能だけですか?
コード例:
public class MyClass
{
public static int X { get; set; }
}
private static void Foo<T>(Func<T> f)
{
Console.WriteLine(f());
}
private static void Bar<T>(Action<T> f)
{
f(default(T));
}
private static void Test()
{
// neither of these lines compile, even with an explicit type-cast.
Foo(MyClass.X);
Bar(MyClass.X);
}
私は推測していた場合、我々は単に書き込みの余分なファズ行うことができたときに、私が言うと思いプロパティ自体に呼び出しや参照を区別する構文の問題は解決する価値がなかったこと() => MyClass.X
かをx => MyClass.X = x
。
set
であるAction
とget
されFunc
、例えば
delegate {return SomeProperty}
ゲッターを渡します。delegate(YourType value) {SomeProperty = value}
セッターを渡します。1つまたは2つの場所のみを渡す必要がある場合、これは、他の方法で作成するラップされたメソッドの省略形です。
Interface
そのプロパティでを定義し、呼び出されたメソッドのシグネチャを変更して、そのインターフェイスをパラメーターとして受け取ることを検討してください。