zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Collection 和 Collections的区别?
    事务是什么?有哪些属性,并简要说明这些属性的含义。
    jsp有哪些内置对象?作用分别是什么?(至少三个)
    谈谈对XML的理解?说明Web应用中Web.xml文件的作用?
    类有哪三个基本特性?各特性的优点?
    Oracle安装完成后,如何用命令行启动和关闭数据库?
    请说明SQLServer中delete from tablea & truncate table tablea的区别
    试述数据库完整保护的主要任务和措施。
    存储过程和函数的区别
    性能
  • 原文地址:https://www.cnblogs.com/chenleinet/p/1924268.html
Copyright © 2011-2022 走看看