将变量分配给另一个变量,并将其中一个变量镜像到另一个变量中
是否可以将变量分配给另一个变量,当您更改第二个变量时,更改会向下变为第一个变量?
像这样。
int a = 0; int b = a; b = 1;
现在b和a都= 1。
我问这个的原因是因为我有4个我正在跟踪的对象,并且我使用名为currentObject的第5个对象跟踪每个对象,该对象等于用户正在使用的4个对象中的任何一个。 但是,我想对currentObject进行一个更改,并将它从它变为瀑布变为瀑布。
谢谢
您需要区分对象 , 引用和变量 。 如果你有两个不同的变量(通过方法中的ref / out没有别名等),那么这些变量将是独立的。
但是,如果两个变量引用同一个对象 (即它们的类型是一个类,并且它们的值是相等的引用),那么通过任一变量都可以看到对该对象的任何更改。 听起来这就是你想要实现的目标。 例如:
public class SomeMutableClass { public string Name { get; set; } } // Two independent variables which have the same value SomeMutableClass x1 = new SomeMutableClass(); SomeMutableClass x2 = x1; // This doesn't change the value of x1; it changes the // Name property of the object that x1's value refers to x1.Name = "Fred"; // The change is visible *via* x2's value. Console.WriteLine(x2.Name); // Fred
如果您对引用类型和对象的工作方式不太满意,您可能希望阅读我关于它们的文章 。
编辑:我经常使用的一个类比是房子。 假设我们有两张纸(变量)。 相同的房屋地址写在两张纸上(这是每个变量的值 , 参考 )。 只有一个房子。 如果有人用第一张纸送到房子里,然后将门涂成红色,他们就不会改变他们的纸张 – 他们正在改变房子的一些东西。 然后,如果有人用第二张纸到达房子,他们会看到前门也是红色的。 只有一个房子,但是很多纸上写着地址。
使用struct / value类型——- NO
像int,boolean,double等。
使用引用类型——– YES
喜欢课程,对象等
首先,您应该了解您在之前的代码中正在做什么
- 在内存中创建一个名为“a”的4字节大小的变量,然后给它一个值0
- 在内存中创建一个名为“b”的4字节大小的变量,然后给它一个值(a)的值[当前为0]
- 将变量“b”的值更改为1
但这不是你想要的,你想要的更像是这样
- 在内存中创建一个名为“a”的4字节大小的变量,然后给它一个值0
- 在内存中创建一个名为“b”的4字节大小的变量,之后更改变量“b”的地址,使其不再引用这4个字节,而是引用(a)的4个字节
你要求的是坏+不可能
但是你应该要求的是这个
- 在内存中创建一个名为“a”的4字节大小的变量,然后给它一个值0
- 创建一个引用变量a的地址
- 通过此地址更改a的值
这种方法实际上完全没问题,它使用指针 ,指针只是内存中的地址。
注意:要使用指针,必须在Project> Build中允许不安全的代码
在代码中这里是如何做到的:
int a = 5; unsafe //use unsafe around the areas where pointers exist { int* b = &a; //create an address named b that refers to a *b = 1; //change the value of the variable that exists at the address b refers to to 1 //now a = 1 }
您正在寻找的是一种通常被称为观察者的设计模式。 对象B将监视对象A(或4个对象,因为这是您需要的),并且当A被修改时,B被通知并相应地更新其状态。
在C#的情况下,我会使用事件。 例如,在A.上定义事件ValueChanged .B将侦听此事件并更新其值。
public delegate void ChangedEventHandler(object sender, EventArgs e); Class A { public event ChangedEventHandler Changed; int val = 0; int Val { get { return val;} set { if ( val != value ) val = value { val = value; if (Changed != null) Changed(this, new EventArgs()); } } } class B { A obj1, obj2, obj3, obj4; int Val {get;set;} A CurrentlyWatched {get;set;} public B() { obj1 = new A(); obj1.Changed += new ChangedEventHandler(ElementChanged); obj2 = new A(); ... } private void ElementChanged(object sender, EventArgs e) { this.CurrentlyWatched = sender as A; this.Val = CurrentlyWatched.Val; } }
在这里,您可以更改get和set函数中的代码以执行任何操作。 但是,您无法在函数中声明这一点。
int a; int b { get { return a; } set { a = value; } }
我不太擅长C#编程,但我刚刚发现了这个快速修复:如果你在for循环中进行赋值,你的第一个变量就不会被修改。
int a = 3; int b; for (int i = 0; i < 1; i++) { b = a; } b = 2; // a = 3
希望能帮助到你
上述就是C#学习教程:将变量分配给另一个变量,并将其中一个变量镜像到另一个变量中分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1001681.html