Sappiamo tutti che le proprietà in C # vengono compilate secondo i vecchi e normali metodi. Ma a differenza del metodo (-group) s, non possono essere dati come argomenti ad altri metodi che si aspettano un delegato come Func<T>
o Action<T>
(getter e setter). C'è qualcosa di speciale che vieta questo, o è solo una caratteristica che non è venuta "gratis" quando si rendono i gruppi di metodi implicitamente convertibili ai delegati?
Codice di esempio:
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);
}
Se dovessi indovinare, direi che il problema sintattico di differenziare tra invocazioni e riferimenti alla proprietà stessa non valeva la pena di risolverlo quando possiamo semplicemente fare il fuzz extra di scrivere () => MyClass.X
o x => MyClass.X = x
.