代码之家  ›  专栏  ›  技术社区  ›  pencilCake

var foo=new Love();和object foo=new Love()之间有什么区别;?

  •  2
  • pencilCake  · 技术社区  · 14 年前

    由于我不熟悉隐式输入法,请您告诉我以下两种方法的主要区别:

     var foo = new Love(); 
    

    以及

    object foo = new Love();
    
    4 回复  |  直到 14 年前
        1
  •  16
  •   Brian Rasmussen    14 年前

    在第一种情况下 foo Love object .

        2
  •  11
  •   Heinzi    14 年前
    var foo = new Love(); 
    

    这里,那个 静止的 变量类型 foo Love . 相当于写作 Love foo = new Love(); .

    object foo = new Love();
    

    这里,那个 变量类型 object

    这个 动态 运行时 在这两种情况下,这就是为什么 GetType 会回来的 两者都有。

        3
  •  6
  •   Jon Skeet    14 年前

    var ,编译 基于赋值运算符右侧表达式的变量类型。

    换句话说,

    var foo = new Love();
    

    确切地

    Love foo = new Love();
    

    所以所有的成员 Love 将通过 foo 被声明为类型 object GetHashCode() , ToString() , GetType() Equals() .

    ,您仍在使用静态类型(与使用 dynamic 在C#4)中。你只是没有明确说明变量的类型-而是让编译器为你计算出来。但是,它必须是编译器 可以

    // All invalid
    var a = null;
    var b = delegate() { Console.WriteLine("Hello"); };
    var c = x => Console.WriteLine("lambda: " + x);
    var d = MethodName; // Attempted method group conversion
    

    在这些情况下,编译器没有足够的信息来计算您所指的类型。

        4
  •  2
  •   Cheng Chen    14 年前
    var foo = new Love();
    

    这里等于

    Love foo = new Love();
    

    有时我们可以用 var Dictionary<string,Dictionary<int,string>>. 你可以使用类爱的所有方法/属性。

    object foo = new Love();
    

    现在foo被认为是一个对象,您看不到类Love的任何方法/属性,但是您可以将其转换回来。

    推荐文章