如何将一个对象的引用传递给同一类的另一个对象?

时间:2018-07-19 17:19:56

标签: c# oop

public Class A
{ 
    public string Name { get; set; } 
}

public Class B
{ 
    A obj1 = new A(); 
    obj.Name = "ABCDEFGH";
}

public Class C
{ 
    A obj2 = ...
} 

如何将obj1的引用传递给obj2。这样在这种情况下也可以访问obj1的所有数据(例如Name)?

2 个答案:

答案 0 :(得分:0)

您可以这样做:

public class B
{ 
    A obj1 = new A(); 

    public void Foo()
    {
        A obj1 = new A(); 
        obj1.Name = "ABCDEFGH";

        C c = new C(obj1);
    }
}

public class C
{ 
    A obj2;

    // Constructor is called when created
    public C(A a) => obj2 = a; // obj2 will now have the same reference 
}

这称为依赖注入。每当我们使用new关键字时,就会调用构造函数。当我们这样做时,我们必须传递对A的引用。

现在,obj2obj1都指向A的相同实例,因此,如果Name再次被更改,则两个类都将观察到该更改。

请记住,类C的所有实例可能不共享obj2的相同实例。这将取决于它们在构造函数中给出的内容。

答案 1 :(得分:-1)

有几件事要考虑:

  1. B类具有哪些属性?它们都是值类型还是引用类型?
  2. 一旦您拥有两个相同的实例,类A和C是否会更改其副本的内部状态?如果是这样,您是否希望这些更改得到体现或会有所不同?

尽管如此,一般来讲,您应该在A类之外实例化X1并将其传递给其构造函数,以便可以克隆它并将其传递给B类的构造函数。请注意,如果您说过,天真的克隆X1可能会导致意外结果,因为列表是其属性之一(因为X1和X2都将指向相同的列表,而不是每个都拥有相同的列表)。

还有其他选项,例如使用只读界面,但我需要更多细节。

echo "/gpx/trk/name=MyTrack1" | awk 'match($0,/=.*$/){print substr($0,RSTART+1,RLENGTH-1)}'