C# 动态、对象、变量
随着.NET 4中C# 动态、对象、变量,c#,object,dynamic,var,C#,Object,Dynamic,Var,随着.NET 4中动态类型和DLR的出现,我现在在声明我称之为“打开”类型时有3个选项: var,本地隐式类型强调“what”而不是“how” 对象,系统对象的别名,以及 动态,禁用编译器检查,在运行时添加方法/属性 虽然有很多关于这些的文章,但我没有发现任何东西能把它们放在一起,我必须承认,这仍然有点模糊 添加LINQ、lambda表达式、匿名类型、反射。。。它变得更加不稳定 我希望看到一些例子,也许是对比优势/劣势,以帮助我巩固对这些概念的理解,并帮助我理解何时、何地以及如何在它们之间进
动态类型和DLR的出现,我现在在声明我称之为“打开”类型时有3个选项:
var
,本地隐式类型强调“what”而不是“how”
对象
,系统对象的别名
,以及
动态
,禁用编译器检查,在运行时添加方法/属性
虽然有很多关于这些的文章,但我没有发现任何东西能把它们放在一起,我必须承认,这仍然有点模糊
添加LINQ、lambda表达式、匿名类型、反射。。。它变得更加不稳定
我希望看到一些例子,也许是对比优势/劣势,以帮助我巩固对这些概念的理解,并帮助我理解何时、何地以及如何在它们之间进行选择
谢谢大家! var
:我使用它来保持代码简短:
而不是写:
MyFramework.MyClass.MyType myvar = new MyFramework.MyClass.MyType();
我可以保持“简短”:
与编写完整类型完全相同,因此在变量应为单一类型时使用该选项。它经常与一起使用,因为您经常与LINQ一起使用
是所有类的根,因此当一个变量将有许多不同的、不相关的/非继承的实例时,或者当您不知道ad编译时的类型(例如反射)时,应该使用它。如果可能的话,通常应该避免使用它
适用于本质上是动态的对象,因为它们可以有不同的方法和属性,这些方法和属性对于与COM、动态语言和领域特定语言交互非常有用。
- 使用
var
使代码简短易读,或者在使用匿名类型时:
var dict = new Dictionary<int, List<string>>();
var x = db.Person.Select(p => new { p.Name, p.Age });
看看这个,它提供了动态关键字的优点和局限性。var
是静态类型,因此类型在编译和运行时是已知的(因此有助于捕获键入错误)
dynamic
非常类似于对象,但不限于Object
方法,这里的类型是在运行时推断的,它将用于希望实现某些动态行为的情况
对于object
它没有任何你会使用的这样的成员,在这种情况下,泛型更受欢迎这不是一个匿名类型的例子(除非Name
本身就是一个匿名类型,我不认为它可以)。@George,是的,修复了。我不知道我为什么那样写。
var dict = new Dictionary<int, List<string>>();
var x = db.Person.Select(p => new { p.Name, p.Age });
object m_lock = new object();
lock (m_lock)
{
// do something
}