试图理解这一点:bool变量是C#中的值类型

时间:2015-11-03 22:33:51

标签: c# reference boolean value-type

在C#中,bool和long等基本数据类型是值类型。这意味着如果你声明一个bool变量并为其赋值另一个bool变量的值,你将在内存中有两个单独的bool值。 稍后,如果更改原始bool变量的值,则第二个bool变量的值不会更改。这些类型按值复制。 (来自专业C#5.0 Nagel,Christan,Glynn,Jay,Skinner,Morgan的代币)

所以,如果我们有一个类如下:

for n in range(N):
  for h in range(H):
    for w in range(W):
      b[n][0][h][w] = 0
      for c in range(C):
        b[n][0][h][w] += a[n][c][h][w]

然后在主要课程中我们有以下内容:

public class Tutorial()
{
   public bool param1;
}

结果显示Tutorial x, y; x = new Tutorial(); x.param1 = false; y=x; Console.WriteLine(y.param1); y.param1 = true; Console.WriteLine (x.param1); 然后false 我的问题是它不应该打印true false ??正如文中提到的那样,我开始粘贴?

4 个答案:

答案 0 :(得分:4)

  

我的问题是不应该打印假false?正如在提到的那样   文字我粘贴在开始?

不,因为xy都是引用类型,并且它们指向同一个对象。这是由于此作业y=x;而发生的。因此,使用param1更改x的值等同于使用y执行此操作。

  

"这意味着如果你声明一个bool变量并将其分配给   另一个bool变量的值,你将有两个单独的bool值   在记忆中"

bool x = true;
// We copy the value stored in x to the y
bool y = x;
// We change the x and the y doesn't change ! 
bool x = false;
// We verify the above with writing to the console
// the values of x and y
Console.WriteLine(x); // writes false to the console
Console.WriteLine(y); // writes true to the console.

答案 1 :(得分:2)

如果你看一下

Tutorial x, y;
y=x;

您的课程教程是一种参考类型。作业

y=x;

创建一个别名,y引用与x相同的Tutorial实例。 bool是值还是引用类型是无关紧要的,因为您正在修改相同Tutorial实例的param1。

答案 2 :(得分:0)

不,因为这一行:

y=x;

这意味着y和x都指向同一个对象(Tutorial的一个实例),因此当您通过x引用实例时,也会反映您通过y对此实例所做的任何更改。

在这种情况下,x和y都是引用,因为作为类的Tutorial是引用类型。

答案 3 :(得分:0)

这显示错误,错误:

public class Tutorial()
{
   public bool param1;
   public bool param2;
}

Tutorial x;
x = new Tutorial();
x.param1 = false;
x.param2=x.param1;
Console.WriteLine(x.param1);
x.param1 = true;  
Console.WriteLine (x.param2);