簡體   English   中英

如何在C#4.0中使用動態類型調用靜態方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM