Kita semua tahu bahwa properti di C # dikompilasi dengan metode lama sebenarnya. Tetapi tidak seperti metode (-group), mereka tidak dapat diberikan sebagai argumen untuk metode lain yang mengharapkan delegasi seperti Func<T>
atau Action<T>
(pengambil dan penyetel). Apakah ada sesuatu yang khusus melarang ini, atau itu hanya fitur yang tidak datang "secara gratis" ketika membuat grup metode secara implisit dapat dikonversi menjadi delegasi?
Kode contoh:
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);
}
Jika saya harus menebak, saya akan mengatakan bahwa masalah sintaksis yang membedakan antara pemanggilan dan referensi ke properti itu sendiri tidak layak untuk diselesaikan ketika kita bisa melakukan sedikit saja penulisan () => MyClass.X
atau x => MyClass.X = x
.
set
adalah Action
dan get
merupakan Func
misalnya
delegate {return SomeProperty}
melewati pengambil; delegate(YourType value) {SomeProperty = value}
melewati setter. Jika Anda hanya perlu melewati satu atau dua tempat, ini adalah singkatan untuk metode terbungkus yang seharusnya Anda buat.
Interface
dengan properti itu, dan mengubah tanda tangan dari metode yang disebut untuk mengambil bahwa antarmuka sebagai parameter.