2010-09-07 25 views
5

herkes dinamik lang özelliklerini kullanarak dizinleyicideki yoluyla CLR nesne üzerinde yöntemini çağırmak mümkün olup olmadığını biliyor mu? Örneğin, myClrObj["SuperMethod"]() için kolayca javascript yapabileceğiniz. peşinC# Dinamik dizin

teşekkür.

cevap

1

Orada iyi yollar olabilir, ama ben bunu nasıl bilirdiniz bir yoludur olabilir:

  • dizinleyicideki
  • aracılığıyla erişim yakalamak için DynamicObject
  • geçersiz kılma uygun yöntem devralan bir sınıf oluşturun
  • Verilen dizinleyici bağımsız değişkeni
  • aracılığıyla bulduğunuz yönteme karşılık gelen bir temsilci oluşturun ve önbelleğe alın. Nesnenin dinamik görünmesini sağlayan bir uzantı yöntemi sağlayın, doğru DynamicObject özelliğiyle ation ortaya çıktı.

    dynamic obj = myObj.AsIndexedObj(); obj["Do"]();

+0

Harika bir fikir, ama uygun değil. Dinamik türetilmemiş mevcut sınıflarım var. – AndrewG

+0

Sen DynamicObject adresinin nesneleri türetmek için gerekmez. Bunun yerine, özgün nesnenin adına dinamik etkileşime bir adaptörün bir şey yaratmak. Bu nesnenin birçok türleri boyunca yeniden kullanılabilir hale getirme avantajına sahiptir – flq

0

Sen Nuget aracılığıyla ImpromptuInterfsce mevcut kullanabilirsiniz, o daha basit dinamik adında bir yöntemi çağırmak için yapmak DLR API sarar dinamik ve poco nesneler ikisi için çalışır. Poco nesneleri için yansımadan daha hızlı.

Impromptu.InvokeMember(myClrObj,"SuperMethod")