如何使两个类属性引用相同的值

时间:2016-03-24 09:53:29

标签: c#

我正在尝试执行以下操作:

我希望有两个课程 propList.push(new Property(1,<?php echo json_encode($propertyNameList[0]); ?>, <?php echo json_encode($propertyCodeList[0]); ?>)); Class01。使用Class02的{​​{1}}属性初始化Class02 Integer的属性。当我更改Integer时。整数现在我想拥有Class01。整数也发生了变化。我怎么能这样做?

Class01

5 个答案:

答案 0 :(得分:3)

您需要区分引用类型和值类型。

更改引用类型的值时,会在引用此对象的任何位置更改它。

int是一个值类型,因此当在一个对象中更改整数属性时,它不会在另一个对象中自动更新它。

Class01是一种参考类型,如果您以与Integer属性类似的方式使用它,它将按您希望的方式工作。

值类型示例:int,double,bool,char,DateTime。

参考类型的示例:表单,字符串,列表

最脏的解决方案是让一个类具有static变量,例如带有static int的Class03,Class01和Class02都可以访问和更新而不是自己的属性,但我不建议这样做。根据体系结构的不同,您可能会发现您可能希望为此值编写包装器,使其成为引用类型,或者使用事件通知其他对象有关更改或使用某种类型的继承(如果类是非常连接的)。 p>

答案 1 :(得分:2)

你不能这样做,因为int是值类型,每个类都有它的&#39;自己的int值副本;

您可以编写包含int值的类包装器,并在类中设置对它的引用,或者您可以尝试框int

答案 2 :(得分:1)

@JRace

分配Class01对象的值只会复制值而不是内存引用。 因此,无论何时在one.Integer进行更改,它都永远不会反映到two.Integer。 您可以使用int属性创建一个新类(引用类型),创建此类的实例并工作。 它会有所帮助。

public class Class02
    {
        public Data Integer { get; set; }
    }
    public class Class01
    {
        public Data Integer { get; set; }
    }
    public class Data {

        public int Integer { get; set; }
    }
    public class A
    {
        private void myFunc()
        {
            Data data = new Data();
            data.Integer = 16;
            Class01 one = new Class01 { Integer = data };
            Class02 two = new Class02 { Integer = data };
            Console.WriteLine("Class one: {0} -- Class two: {1}", one.Integer.Integer, two.Integer.Integer);
            // Prints: Class one: 16 -- Class two: 16
            data.Integer++;
            Console.WriteLine("Class one: {0} -- Class two: {1}", one.Integer.Integer, two.Integer.Integer);
            // Prints:             Class one: 17 -- Class two: 16
            // I want it to print: Class one: 17 -- Class two: 17
        }
    }

答案 3 :(得分:0)

我知道1种方式,它可能不是最简单的方法,但确实有效:

你可以创建一个自定义事件处理程序,在事件处理程序初始化时在事件处理程序中订阅这些类,一旦它们在事件处理程序中订阅为这些类创建公共void,就调用public void类似public void UpdateIntegerValue(int) ,在该事件处理程序内部引发该事件,其中1个参数击败整数值,另一个参与类对象本身,然后简单地为每个类实例设置值。

最后,用一行更新所有两个类就好了,例如UpdateIntegerValueForAllClasses(Object ownerclass,int integerToUpdate);

如果你没有完全理解它或需要更多细节,请告诉我。

答案 4 :(得分:0)

如果要在类的所有实例之间共享变量,则可以创建父类,两个类将从该类继承,并在其中定义protected static变量(protected =只能访问此类和从其继承的类; static =在整个类型中共享):

abstract class ClassAbstract{
    protected static int _myInteger {get;set;}
}

class Class01:ClassAbstract{
    public int MyInteger {
        get{return _myInteger;}
        set{ _myInteger=value;}
    }
}

class Class02:ClassAbstract{
    public int MyInteger {
        get{return _myInteger;}
        set{ _myInteger=value;}
    }
}

static class Program {
    public void Main(){
        Class01 one = new Class01();
        one.MyInteger = 16;
        Class02 two = new Class02();
        Console.WriteLine("Class two: {0}", two.MyInteger);
    }
}