动态、对象、变量

本文关键字:变量 对象 动态 | 更新日期: 2023-09-27 18:00:15

随着 .NET 4 中 dynamic 类型和 DLR 的出现,我现在在声明所谓的"开放"类型时有 3 个选项:

  • var,局部隐式类型强调"什么"而不是"如何",
  • objectSystem.Object 的别名和
  • dynamic,禁用编译器检查,在运行时添加方法/属性

虽然有很多关于这些的文章,但我发现没有把它们放在一起,我不得不承认,它仍然有点模糊。

添加到此 LINQ、lambda 表达式、匿名类型、反射...而且它变得更加摇摇欲坠。

我希望看到一些例子,也许是对比优势/劣势,以帮助我巩固对这些概念的理解,并帮助我理解何时、何地以及如何在它们之间进行选择。

谢谢!

动态、对象、变量

  • 使用 var 使代码保持简短且更具可读性,或者在使用匿名类型时:

    var dict = new Dictionary<int, List<string>>();
    var x = db.Person.Select(p => new { p.Name, p.Age });
    
  • 当动态绑定有用或需要时,请使用dynamic。或者,当您需要根据对象的运行时类型决定调用哪个方法时。

  • 尽可能
  • 少地使用object,最好使用特定类型或泛型。它有用的一个地方是当您将对象仅用于锁定时:

    object m_lock = new object();
    lock (m_lock)
    {
        // do something
    }
    

>var与编写完整类型完全相同,因此当变量应该是单一类型时,请使用它。它通常与 LINQ 一起使用,因为您经常在 LINQ 中使用匿名类型。

object 是所有类的根,因此当变量将具有许多不同的、不相关/未继承的实例时,或者当您不知道编译时间的类型(例如反射(时,应该使用。如果可能的话,通常应避免使用它。

dynamic适用于本质上是动态的对象,因为它们可以具有不同的方法和属性,这些方法和属性对于与 COM 以及动态语言和域特定语言进行交互非常有用。

> var : 我用它来保持代码简短:

而不是写:

MyFramework.MyClass.MyType myvar = new MyFramework.MyClass.MyType();

我可以保持"简短":

var myVar = new MyFramework.MyClass.MyType();

var是静态类型的,因此Type在编译和运行时是已知的(因此有助于捕获拼写错误(

dynamic与对象非常相似,但不像Object方法那样受到限制,这里的Type是在运行时推断的,它将用于您想要实现某些动态行为的情况。

好吧,object它没有任何您将使用的此类成员,在这种情况下,泛型会更可取