【C#】使用类作为其他类的属性,调用的时候有些问题让我不明白
把代码简单写一写public class A
{
public int key;//属性
}
public class B
{
public A test;//属性
}
class Program
{ static void Main(string[] args)
{
B b0=new B();
b0.A=12;
B b1=new B();
B b2=b1;
b1=b0.A;//执行完这一句,b1等于12,而且b2也等于
A a1=new A();
A a2=a1;
a1=b0.A;//执行完这一句,a1等于12,但是a2没有变化
}}
为什么会出现这样的情况,是不是类作为属性以后,有什么说法??
--------------------编程问答-------------------- int是值类型,A是引用类型。
B b0=new B();
b0.A=12;? --------------------编程问答-------------------- 你这个代码都不能编译通过,错误的 --------------------编程问答-------------------- 一时心急写错了,不好意思
是这样
class Program
{ static void Main(string[] args)
{
B b0=new B();
b0.A.key=12;
B b1=new B();
B b2=b1;
b1=b0;//执行完这一句,b1.A.key等于12,而且b2.A.key也等于12
A a1=new A();
A a2=a1;
a1=b0.A;//执行完这一句,a1.key等于12,但是a2没有变化
}}
--------------------编程问答-------------------- 这就是值类型他引用类型的区别
test(int)是值类型,A(class)是引用类型,
B b2=b1;
b1=b0;
引用相同,同时改变,
--------------------编程问答-------------------- B b0=new B();
b0.A.key=12;?这句话不抛异常吗?A没赋值 --------------------编程问答--------------------
我没在平台写这段程序,写这个我就想问问,为什么会出现刚才的a1和a2不同时改变的现象。 --------------------编程问答--------------------
就是说,虽然test这个字段我定义成A(类这种引用类型),但是test他还是个值类型,是吗? --------------------编程问答-------------------- 向同时改变很简单:
public class B
{
public static A test;//static 修饰,只有一个A的实例
}
很多时候全局类,即单个实例,都要可以封装在一个glbol类里,成为一个静态成员
这是我几年摸索出来的方法。
单个实例classA AA=classB.A
想多个实例,直接classA AA= new classA();
--------------------编程问答--------------------
我这么问是因为如果A不赋值根本确定不了你的问题。不知道其他人是如何判断出来的。 --------------------编程问答-------------------- B b0 = new B();
//b0.A = 12;
b0.test = new A();
b0.test.key = 12;
B b1 = new B();
B b2 = b1;
b1 = b0;//执行完这一句,b1等于12,b2不等于
A a1 = new A();
A a2 = a1;
a1 = b0.test;//执行完这一句,a1等于12,但是a2没有变化 --------------------编程问答-------------------- 呵呵 接分中
--------------------编程问答-------------------- B b0 = new B();
//b0.A = 12;
b0.test = new A();
b0.test.key = 12;
B b1 = new B();
B b2 = b1;
b1 = b0;//执行完这一句,b1等于12,而且b2不等于b1
A a1 = new A();
A a2 = a1;
a1 = b0.test;//执行完这一句,a1等于12,但是a2没有变化 --------------------编程问答-------------------- 按照你的程序,b1.A.key等于12,而且b2.A.key也等于0的,b2.A.key并没有等于12 。同样,下面也不会改变。如果你想把值改变就把
B b2=b1;
b1=b0;
和
A a2=a1;
a1=b0.A;这里调一下位置就会是一样的了 --------------------编程问答-------------------- 这样写不报错吗? --------------------编程问答-------------------- 搞错了,是8楼的 --------------------编程问答-------------------- 类定义里怎么能直接写执行代码呢. --------------------编程问答-------------------- A a1=new A();
A a2=a1;
a1=b0.A;//执行完这一句,a1.key等于12,但是a2没有变化
a1和a2(地址1)
b0.a和a1(地址2)
补充:.NET技术 , C#