C#中object和var的区别

发布于 2024-10-08 20:20:17 字数 52 浏览 2 评论 0原文

objectvar 有什么区别?

What is the difference between object and var?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

故笙诉离歌 2024-10-15 20:20:17
  • var - 未明确指定类型。让编译器弄清楚该类型是什么。
    • 类型在设计时是固定的,不能引用其他类型的对象。
    • 正如 Pauli 在评论中指出的那样,您将获得 intelliSense
    • 必须初始化。 var i; 无法编译。
    • 不能用作方法的返回类型。
    • 必须是局部变量。不是字段或属性。
    • 匿名类型配合得很好 。您将获得intelliSense
  • 对象 - System.Object
    • 可用于在运行时引用任何类型。
    • 在这里您无法获得 intelliSense

例子:

var i = 0; // i is of type `System.Int32`.  Same as "int i = 0;"
i = "Some String"; // Compile time error.

object o = 0;  
o = "Some String"; // Works
  • var - Not specifying the type explicitly. Letting compiler figure out what that type is.
    • Type is fixed at design time and cannot refer to object of other type.
    • As Pauli noted in a comment, you get intelliSense.
    • Must be initialized. var i; won't compile.
    • Cannot be used as return type of a method.
    • Must be a local variable. Not a field or property.
    • Works great with Anonymous Types. You get intelliSense.
  • object - System.Object.
    • Can be used to refer any type at runtime.
    • Here you don't get intelliSense.

Example:

var i = 0; // i is of type `System.Int32`.  Same as "int i = 0;"
i = "Some String"; // Compile time error.

object o = 0;  
o = "Some String"; // Works
凉世弥音 2024-10-15 20:20:17
  • 对象将被确定在
    运行时,但 var 确定于
    编译时间。

例如:

var i = 2;
object j = 2;

你在 ildasm 中查看它:

  IL_0000:  nop
  IL_0001:  ldc.i4.2
  IL_0002:  stloc.0
  IL_0003:  ldc.i4.2
  IL_0004:  box        [mscorlib]System.Int32
  IL_0009:  stloc.1

你可以看到 object item 应该装箱,而 var item 不需要装箱。

对象var

  • 你也可以这样做:

     对象 i;
       我 = 2;
    

    但你不能这样做:

    <前><代码> var i;
    我 = 2;

    你会得到编译错误。

  • 对象是所有事物的类型
    .Net继承自它,所以你可以这样做
    对于任何类型的 y,对象 x = y
    因为继承,但 var 是一个
    隐式类型定义的关键字,
    例如 var i = 2 表示 int i =
    2.
  • object will be determined in
    runtime, but var determined in
    compile time.

for example:

var i = 2;
object j = 2;

and you look at it in ildasm:

  IL_0000:  nop
  IL_0001:  ldc.i4.2
  IL_0002:  stloc.0
  IL_0003:  ldc.i4.2
  IL_0004:  box        [mscorlib]System.Int32
  IL_0009:  stloc.1

You can see object item should be boxed and var item no need to boxing.

MSDN for object and var

  • Also you can do:

       object i;
       i = 2;
    

    but you can't do:

       var i;
       i = 2;
    

    you will get compile error.

  • Object is type which all things in
    .Net inherited from it, so you can do
    object x = y for any type of y
    because of inheritance, but var is a
    keyword for implicit type definition,
    for example var i = 2 means int i =
    2.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文