Bunu yapmanın üç yolu vardır; Birincisi GetGetMethod()/GetSetMethod() kullanmak ve Delegate.CreateDelegate ile bir temsilci oluşturmaktır. İkincisi bir lambda (yansıma için çok fazla kullanılmaz!) [Yani. X => x.Foo]. Üçüncüsü ise İfade (.NET 3.5). Belirli örneğine işaret temsilci isterseniz, lambda için kapanışları kullanabileceği
TestClass foo = new TestClass();
foo.Value = 1;
Console.WriteLine("Via property: " + foo.Value);
lambdaSet(foo, 2);
Console.WriteLine("Via lambda: " + lambdaGet(foo));
reflSet(foo, 3);
Console.WriteLine("Via CreateDelegate: " + reflGet(foo));
Not:
lambda kullanımını göstermek için
class TestClass
{
public int Value { get; set; }
}
static void Main()
{
Func<TestClass, int> lambdaGet = x => x.Value;
Action<TestClass, int> lambdaSet = (x, val) => x.Value = val;
var prop = typeof(TestClass).GetProperty("Value");
Func<TestClass, int> reflGet = (Func<TestClass, int>) Delegate.CreateDelegate(
typeof(Func<TestClass, int>), prop.GetGetMethod());
Action<TestClass, int> reflSet = (Action<TestClass, int>)Delegate.CreateDelegate(
typeof(Action<TestClass, int>), prop.GetSetMethod());
}
en kolay ;-p olduğunu veya örnek oluşturan ve kabul eden CreateDelegate'in aşırı yüklenmesi.
Bence bu, sahip olduğum ihtiyaçlar için işe yarayacak. Teşekkürler! –
C# ilk dilimin olması gerektiği düşünülürse gerçekten bu şeyi anladım (yansıma kullanarak bir delege yaratıyor) - harika sesler – JohnIdol
Ve .net 2.0 için bir eylem yapabilir valueSetter = temsilci (int değer) {tc .Value = değer; } –