var foo = new Love(); 和有什么区别AND 对象 foo = new Love();?
因为我不熟悉隐式类型;你能告诉我以下之间的主要区别吗:
var foo = new Love();
和
object foo = new Love();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
在第一种情况下,
foo
的类型是Love
。在第二种情况下,它是对象
。In the first case the type of
foo
isLove
. In the second case it isobject
.这里,变量
foo
的静态类型是Love
。它相当于编写Love foo = new Love();
。这里,变量
foo
的静态类型是object
。如果不先使用强制转换,您就无法访问 Love 的任何方法。在这两种情况下,
foo
的动态类型(或运行时类型)都是Love
,这就是为什么GetType
将为两者返回Love
。Here, the static type of variable
foo
isLove
. It's equivalent to writingLove foo = new Love();
.Here, the static type of variable
foo
isobject
. You cannot access any of Love's methods without using a cast first.The dynamic type (or runtime type) of
foo
isLove
in both cases, which is whyGetType
will returnLove
for both.使用
var
,编译器根据赋值运算符右侧的表达式推断变量的类型。换句话说,
完全相当于
所以
Love
的所有成员都可以通过foo
获得 - 而如果foo
> 被声明为object
类型,您只能访问GetHashCode()
、ToString()
、GetType( )
和Equals()
。使用
var
,您仍然使用静态类型(而不是在 C# 4 中使用动态
)。您只是没有明确说明变量的类型 - 您让编译器为您解决它。但是,它确实需要是编译器可以计算出的类型。例如,这些都是无效的:在这些情况下,编译器没有足够的信息来确定您指的是哪种类型。
With
var
, the compile infers the type of the variable based on the expression on the right-hand side of the assignment operator.In other words,
is exactly equivalent to
So all the members of
Love
will be available viafoo
- whereas iffoo
were declared to be of typeobject
, you'd only have access toGetHashCode()
,ToString()
,GetType()
andEquals()
.With
var
, you're still using static typing (as opposed to usingdynamic
in C# 4). You're just not explicitly stating the type of the variable - you're letting the compiler work it out for you. However, it does need to be a type that the compiler can work out. So for example, these are all invalid:In these cases the compiler doesn't have enough information to work out which type you mean.
这里它等于
有时我们可以使用
var
来避免长类名,例如Dictionary>。
您可以使用 的所有方法/属性类爱。现在 foo 被认为是一个对象,你看不到 Love 类的任何方法/属性,但你可以将它转换回来。
here it equals to
sometimes we can use
var
to avoid long class name e.g.Dictionary<string,Dictionary<int,string>>.
You can use all methods/properties of class Love.Now foo is considered to be an object, you can't see any method/property of class Love, but you can convert it back.