• dynamic(翻译)


    So I asked this guy, what's up with the dynamic keyword, and what type was it exactly? I mean, C# isn't dynamic, right? He says:

    我问这个伙计,这dynamic关键字,是什么呢,它是什么类型呢?因为 我认为,c#不是动态类型,他应该有明确的意思和类型,我说的不对吗,但他说:

    "Oh, well it's statically-typed as a dynamic type."

    它是静态类型作为动态类型。

    Then my brain exploded and began to leak out my ears. Honestly, though, it took a second. Here's a good example from some of Ander's slides:

    我的思想开始爆发,实际上,这花费了我一些时间。这里是一个好的例子

    Calculator calc = GetCalculator();
    int sum = calc.Add(10, 20);

    That's the creation of an object, invokation of a method, and the collection of a return value. This is the exact same code, as the "var" type is figured out at compile time.

    创建一个对象,然后这个对象的方法,并获得方法的返回值。下面是一个同样的代码,但是稍微不同的是,用到了var(var定义的对象,必须在编译时能获得它的明确引用)

    var calc = GetCalculator();
    int sum = calc.Add(10, 20);
    If you wanted to do the exact same thing, except with Reflection (like if it were some other class, maybe old-COM interop, or something where the compiler didn't know a priori that Add() was available, etc) you'd do this:
    如果上面的对象不能在编译时指明的话,只能用反射(例如,一些其它的类,可能是old-com interop,或者其它的一些东西,导致编译器不能预先知道这个add方法,是有效的)
    object calc = GetCalculator();
    Type calcType = calc.GetType();
    object res = calcType.InvokeMember("Add",
        BindingFlags.InvokeMethod, null,
        new object[] { 10, 20 });
    int sum = Convert.ToInt32(res);

    It's pretty horrible to look at, of course. If the object is some dynamic thing (from any number of sources), we can do this:

     
    上面那段代码是多么的槽糕,如果一些东西是动态的,我们就可以做成下面这个样子的
     
    dynamic calc = GetCalculator();
    int sum = calc.Add(10, 20);

    I'm told this is a dynamic expression that will be resolved at runtime.

    Here's a C# program calling a method in a python (.py) file:

    我告诉编译器,在运行时,解决这个对象问题。下面是利用dynamic调用python的方法。
    1
    2
    3
    4
    5
    6
    7
    ScriptRuntime py = Python.CreateRuntime();
    dynamic random = py.UseFile("random.py");
     
    //Make an array of numbers
    var items = Enumerable.Range(1, 7).ToArray();
     
    random.shuffle(items);

    原文链接:http://www.hanselman.com/blog/C4AndTheDynamicKeywordWhirlwindTourAroundNET4AndVisualStudio2010Beta1.aspx

  • 相关阅读:
    50 个 jQuery 插件可将你的网站带到另外一个高度
    查看占用IO的进程
    google全球地址
    php http请求封装
    如何促使团队紧密协作
    pureftpd.passwd解析
    goaccess生成nginx每日访问纪录
    bootstrap的一些资源
    php write_ini_file
    mysql查询区分大小写
  • 原文地址:https://www.cnblogs.com/chenleinet/p/1924268.html
Copyright © 2020-2023  润新知