我有三个班级(Data
,First
,Second
)。
我正在Data
中创建First
的成员,并尝试使用以下内容将其传递给Second
:
public class First
{
public Data DataMember;
Second SecondMember;
void First_Function()
{
SecondMember.Second_Function(ref DataMember);
}
}
public class Second
{
Data DataMember;
public void Second_Function(ref Data data)
{
}
}
有没有办法访问First.Data
成员中的Second.Data
成员?
使用ref
中的Second.Second_Function()
,我可以访问First
的成员,但只能访问Second_Function()
内的成员。
我希望Second
中的其他功能可以访问它,它具有与Second_Function()
不同的“回拨时间”。
编辑:
我的问题不在于参考和价值类型之间的区别。
如果我对一个int变量使用ref关键字,这意味着如果我用另一个值替换它会影响原始变量。
在类中,当我对同一个实例有两个变量引用时如果我编辑其中一个我影响另一个,那是因为它们引用同一个东西,我想知道C#中是否有一种方法可以替换其中一个变量,并使其他变量随之变化。
答案 0 :(得分:3)
C#中有两种类型:引用类型和值类型。 引用类型的变量存储对其数据(对象)的引用, 而值类型的变量直接包含它们的数据。同 引用类型,两个变量可以引用同一个对象; 因此,对一个变量的操作可能会影响引用的对象 由另一个变量。对于值类型,每个变量都有自己的变量 数据的副本,并且不可能对其进行操作 变量影响另一个(除了ref和out之外) 参数变量,有关详细信息,请参阅here
这是一个例子:
<强>解释强>
First
,Second
作为构造函数中的参数 First
或Second
内的数据对象上发生的任何更新都会反映在这些类之外的数据对象上,因为它是reference type
公共类数据{ 公共数据(int值) { this.Value = value; } public int Value {get; set;} }
public class First { 私有数据m_data; public First(数据数据) { m_data = data; } public void Add(int value) { 如果(M_DATA!= NULL) m_data.Value + =值; } }
public class Second { 私有数据m_data; public Second(数据数据) { m_data = data; } public void Multiply(int value) { 如果(M_DATA!= NULL) m_data.Value * =值; } }
现在让我们设置这个场景
var data = new Data(10);
var first = new First(data);
var second = new Second(data);
second.Multiply(5);
first.Add(10);
您期望班级数据中的价值是多少? 10?你错了,价值是60
这是一个有效的demo
希望这会对你有所帮助