2009-10-12 97 views
42

在VB中,var类型是否等同于Variant?当object可以接受任何数据类型时,这两者之间有什么区别?C#中“var”和“object”的区别

+15

只是等到'动态'增加了更多的混淆; -p – 2009-10-12 06:06:43

+5

;)在这种情况下,你也有人在这里帮助我! – user184805 2009-10-12 06:13:08

回答

49

从Visual C#3.0开始,在方法范围声明的变量可以有一个隐式类型var。一个隐式类型的局部变量是强类型的,就像你自己声明了类型一样,但是编译器决定了类型。的i以下两个声明在功能上等同:

var i = 10; //implicitly typed 
int i = 10; //explicitly typed 

VAR不反对

你一定要这样说的:C# 3.0 - Var Isn't Object

6

Nope - var只是表示您让编译器从用于为变量赋值的表达式中推断出该类型。

这只是语法糖,让你少做打字 - 尝试使型“var”的方法参数,看看会发生什么:]

所以,如果你有这样的表达:

var x = new Widget(); 

x将是Widget类型,而不是object

+6

它不仅仅是保存输入 - 'var'是处理匿名类型的唯一方法。 – Kobi 2009-10-12 05:48:26

+0

哦,是的 - 忘了那一点! – 2009-10-12 07:50:26

6

其他的答案是正确的,我只是喜欢补充一点,实际上你可以把你的光标放在'var'关键字上,然后按F12跳转到推断的类型声明。

+8

或者你可以将光标放在“var”上稍微长一些,并在工具提示中看到传染类型; o) - Cédric1分钟前 – 2009-10-12 06:03:52

+0

嗨,当我把光标放在var上并按F12时,我被导航到System.Object,所以我导航时,我把光标放在对象上,并按F12。对此的任何解释...我希望两者都是相同的 – Saravanan 2011-05-02 10:44:57

0

添加到岗位。

Parent p = new Parent(); 
Child c = new Child();//Child class derives Parent class 
Parent p1 = new Child(); 

对于上面只能访问父(p1)属性事件,尽管它包含子对象引用。

var p= new Parent(); 
var c= new Child(); 
var p1 = new Child(); 

当使用'var'而不是类时,您可以访问父类和子类的属性。它的行为就像为孩子类创建对象一样。

-1

一个区别是拳击和拆箱与对象。

+0

装箱和拆箱的概念涉及将值类型转换为引用类型,反之亦然,例如,同时将整数值存储在数组列表中。 var与对象或装箱/拆箱无关。这只是一种编译器技巧,可以消除由于类型名称而涉及内部方法的大量绒毛。例如现在,而不是'ApplicationInstallerForBase obj = new ApplicationInstallerForBase();'我简单地写'var obj = new ApplicationInstallerForBase();'。 'ApplicationInstallerForBase'是我的应用程序中的一个类。 _Note_:我没有downvoted您的帖子。 – RBT 2016-12-12 05:38:44

相关问题