[英]How to invoke static method in C#4.0 with dynamic type?
在C#4.0中,我們具有動態類型,但是如何調用動態類型對象的靜態方法呢?
下面的代碼將在運行時生成異常。 動態對象來自C#類,但也可以是其他語言通過DLR提供的對象。 關鍵不是如何調用靜態方法,而是如何調用C#代碼無法創建的動態對象的靜態方法。
class Foo
{
public static int Sum(int x, int y)
{
return x + y;
}
}
class Program
{
static void Main(string[] args)
{
dynamic d = new Foo();
Console.WriteLine(d.Sum(1, 3));
}
}
恕我直言, 動態被發明來橋接C#和其他編程語言。 還有一些其他語言(例如Java)允許通過對象而不是類型來調用靜態方法。
順便說一句,與C#3.0相比,C#4.0的引入並不那么令人印象深刻。
C#4不直接支持此功能,但是此博客文章中有一個有趣的解決方法: http : //blogs.msdn.com/davidebb/archive/2009/10/23/using-c-dynamic-to-call-static- Members.aspx
盡管C#不支持,但DLR支持。 您可以使用Dynamitey以編程方式訪問dlr調用
var staticContext = InvokeContext.CreateStatic ;
Console.WriteLine(Dynamic.InvokeMember(staticContext(typeof(Foo)), "Sum", 1,3));
一種可能的解決方法是使用反射。
dynamic d = new Foo();
var sum = (int)d.GetType()
.GetMethod("Sum")
.Invoke(d, new object[] { 1, 3 });
Console.WriteLine(sum);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.