Csharp/C#教程:如何在动态类型的C#4.0中调用静态方法?分享


如何在动态类型的C#4.0中调用静态方法?

在C#4.0中,我们有动态类型,但是如何调用动态类型对象的静态方法?

下面的代码将在运行时生成exception。 动态对象来自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)); 

一种可能的解决方法是使用reflection。

上述就是C#学习教程:如何在动态类型的C#4.0中调用静态方法?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 dynamic d = new Foo(); var sum = (int)d.GetType() .GetMethod("Sum") .Invoke(d, new object[] { 1, 3 }); Console.WriteLine(sum); 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/996755.html

(0)
上一篇 2021年12月25日
下一篇 2021年12月25日

精彩推荐