在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
??正如文中提到的那样,我开始粘贴?
答案 0 :(得分:4)
我的问题是不应该打印假false?正如在提到的那样 文字我粘贴在开始?
不,因为x
和y
都是引用类型,并且它们指向同一个对象。这是由于此作业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);