当前位置:编程学习 > C#/ASP.NET >>

C#,引用传递问题~较为复杂,寻求好的解决办法~!

首先我遇到了一个程序的小的架构问题:

对象A包含对象B,在对象A中,使用对象B去构造对象C,此时,对象C中有一个和A中的B一样的对象,
那么我在A中去直接改变对象B,那么C中的那个和A中B一样的对象的值改变吗?

说起来有点复杂,其实逻辑比较简单~
求解答哦~ --------------------编程问答-------------------- 一、
类型A的引用变量 a1=类型A来构造
类型A的引用变量 a2=类型A来构造

二、
类型A的引用变量 a1=类型A来构造
类型A的引用变量 a2=a1

先理解上面的,你的问题就理解了,不要一味的被面象对象所迷惑 --------------------编程问答-------------------- 一、
类型A的引用变量 a1=类型A来构造
类型A的引用变量 a2=类型A来构造
a1和a2指向不同的类型A的实例对象
二、
类型A的引用变量 a1=类型A来构造
类型A的引用变量 a2=a1
a1和a2指向同一个类型A的实例对象
--------------------编程问答-------------------- 使用对象B去构造对象C,此时,对象C中有一个和A中的B一样的对象
这怎么理解如何使用B构造C
如果你是说
C = B;这样直接传引用的构造,那么显然它们是一个对象。

如果你是拷贝,比如
C = new XXX();
C.xxx = B.xxx
C.yyy = B.yyy
这样,那么两个就不是一个对象。

你可以做一个试验
如果object.ReferenceEquals(obja, objb);返回true的话,那么obja 和 objb 就是一个对象。 --------------------编程问答--------------------
引用 2 楼 libinguest 的回复:
一、
类型A的引用变量 a1=类型A来构造
类型A的引用变量 a2=类型A来构造
a1和a2指向不同的类型A的实例对象
二、
类型A的引用变量 a1=类型A来构造
类型A的引用变量 a2=a1
a1和a2指向同一个类型A的实例对象



大版主,这个我还是理解的。

我具体点说我的问题:
首先:
有一个数据类: Data, 操作类 Operate, 另一个操作类SubOperate;

class Data
{
    string str;
}
class Operate
{
    Data _data;
    SubOperate _subOp; 
   
    public Operate(Data data)
    {
       _data = data;
       _subOp = new SubOperate (_data);
     }
}

class SubOperate
{
     Data _data;
     public SubOperate(Data data)
     {
          _data = data;
      }

}


问题是:我在Operate中去改变_data值,SubOperate里面的_data会改变吗?

--------------------编程问答--------------------
引用 3 楼 devmiao 的回复:
使用对象B去构造对象C,此时,对象C中有一个和A中的B一样的对象
这怎么理解如何使用B构造C
如果你是说
C = B;这样直接传引用的构造,那么显然它们是一个对象。

如果你是拷贝,比如
C = new XXX();
C.xxx = B.xxx
C.yyy = B.yyy
这样,那么两个就不是一个对象。

你可以做一个试验
如果object.ReferenceEquals(obja, objb);返回true的话,那么obja 和 objb 就是一个对象。









我具体点说我的问题:
首先:
有一个数据类: Data, 操作类 Operate, 另一个操作类SubOperate;

class Data
{
    string str;
}
class Operate
{
    Data _data;
    SubOperate _subOp; 
   
    public Operate(Data data)
    {
       _data = data;
       _subOp = new SubOperate (_data);
     }
}

class SubOperate
{
     Data _data;
     public SubOperate(Data data)
     {
          _data = data;
      }

}


问题是:我在Operate中去改变_data值,SubOperate里面的_data会改变吗? --------------------编程问答--------------------
引用 1 楼 libinguest 的回复:
一、
类型A的引用变量 a1=类型A来构造
类型A的引用变量 a2=类型A来构造

二、
类型A的引用变量 a1=类型A来构造
类型A的引用变量 a2=a1

先理解上面的,你的问题就理解了,不要一味的被面象对象所迷惑




public partial class Form1 : Form
{
class SubData
{
public string _subdata = "init";
}

class Data
{
public string _data = "init";
public SubData _subdata;

public Data()
{
_subdata = new SubData();
}
}

class Operate
{
public Data _data;
public SubOperate _subOp;

public Operate(Data data)
{
_data = data;
_subOp = new SubOperate(_data);
}
}

class SubOperate
{
public Data _data;
public SubSubOperate _subsubop;

public SubOperate(Data data)
{
_data = data;
_subsubop = new SubSubOperate(_data._subdata);
}
}

class SubSubOperate
{
public SubData _subdata;


public SubSubOperate(SubData data)
{
_subdata = data;
}
}

public Form1()
{
InitializeComponent();
}

Data data;
Operate op;
private void Form1_Load(object sender, EventArgs e)
{
data = new Data();
op = new Operate(data);
}

private void button1_Click(object sender, EventArgs e)
{
// 2.第二点击这个按钮
data._subdata._subdata = "awdaw";
}

private void button2_Click(object sender, EventArgs e)
{
// 1.首先点击这个按钮 textbox 出现 "init"
// 3.再次点击这个按钮 textbox 依旧是 init;
textBox1.Text = op._subOp._subsubop._subdata._subdata;
} --------------------编程问答-------------------- class 如果直接赋值,那就是同一个对象。 --------------------编程问答-------------------- 把 对象的内存分配弄清楚就好了 --------------------编程问答-------------------- 那么C中的那个和A中B一样的对象的值改变吗?答案是改变。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,