声明变量的两种方式是否相同?

时间:2013-03-22 12:47:46

标签: c# .net variable-declaration

下面显示的两种声明变量的方法是否相同?

int aa= 0, bb= 0, cc= 0, dd= 0;

int aa= 0;
int bb= 0;
int cc= 0;
int dd= 0;

3 个答案:

答案 0 :(得分:2)

,这:

int aa = 0, bb = 0, cc, dd;

与以下更常见和可读的版本完全相同:

int aa = 0;
int bb = 0;
int cc;
int dd;

Soner Gönül shows一样,它们产生相同的IL代码。

但你提出了一个很好的问题,因为事情可能会比这更微妙。

指针

在不安全的C#中你可以使用指针。指向整数的指针写为int*。因此,当您要声明三个int*类型的变量时,您可以写下这个:

int* aa, bb, cc;

这正确地代表了你的意图:

int* aa;
int* bb;
int* cc;

但是,指针的语法来自更老的语言C,如果你在C中声明三个指针变量,就像这样:

int* aa, bb, cc;

那意味着一些微妙的不同,而且你实际上写的是:

int* aa;
int bb;
int cc;

这就是为什么C开发人员会改为编写int *aa,以显示只有aa是指针类型,其余的是正常整数。

int *aa, bb, cc;

但是,我不鼓励你完全在C中写这样的东西:这很令人困惑。

Visual Basic和VB.Net

在Visual Basic.NET中,您还可以在一行上声明变量:

Dim aa, bb As Integer

这与:

相同
Dim aa As Integer
Dim bb As Integer

但是如果你用Visual Basic(VB.Net的前身)编程,那么这个:

Dim aa, bb As Integer

意思是:

Dim aa As Any     'aa Is Variant
Dim bb As Integer

答案 1 :(得分:1)

他们是一样的。我认为,一旦你的名字变得更具描述性,第二种选择可能更容易阅读。

答案 2 :(得分:1)

C#支持单个语句可以分配多个局部变量

  

单个语句可以分配多个局部变量。语言   派生自C风格的语法通常允许您使用逗号来声明   一个语句中的多个变量。 C#语言允许这样做。

来自8.5.1 Local variable declarations

  

声明多个变量的局部变量声明是   相当于具有相同的单个变量的多个声明   类型。此外,局部变量中的变量初始化程序   声明完全对应于赋值语句   声明后立即插入。

第一个IL代码;

 .locals init ([0] int32 aa,
           [1] int32 bb,
           [2] int32 cc,
           [3] int32 dd)
  IL_0000:  nop
  IL_0001:  ldc.i4.0
  IL_0002:  stloc.0
  IL_0003:  ldc.i4.0
  IL_0004:  stloc.1
  IL_0005:  ldc.i4.0
  IL_0006:  stloc.2
  IL_0007:  ldc.i4.0
  IL_0008:  stloc.3
  IL_0009:  ret

第二个IL代码;

  .maxstack  1
  .locals init ([0] int32 aa,
           [1] int32 bb,
           [2] int32 cc,
           [3] int32 dd)
  IL_0000:  nop
  IL_0001:  ldc.i4.0
  IL_0002:  stloc.0
  IL_0003:  ldc.i4.0
  IL_0004:  stloc.1
  IL_0005:  ldc.i4.0
  IL_0006:  stloc.2
  IL_0007:  ldc.i4.0
  IL_0008:  stloc.3
  IL_0009:  ret