动态、对象、变量
本文关键字:变量 对象 动态 | 更新日期: 2023-09-27 18:00:15
随着 .NET 4 中 dynamic
类型和 DLR 的出现,我现在在声明所谓的"开放"类型时有 3 个选项:
-
var
,局部隐式类型强调"什么"而不是"如何", -
object
、System.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
它没有任何您将使用的此类成员,在这种情况下,泛型会更可取