簡體   English   中英

如何為對象分配父引用

[英]How to assign a parent reference to an object

假設我有以下對象:

ZeroObject A = new ZeroObject("A");
ZeroObject B = new ZeroObject("B");
ZeroObject C = new ZeroObject("C");
ZeroObject D = new ZeroObject("D");

當我做:

B = A;

在代碼的某個地方, B應該有A的引用,對嗎?

然后:

C = B;

這意味着CB引用。 有沒有辦法讓C的參考A不使用:

C = A;

首先,我假設ZeroObject是一個類。 如果不是,請忽略此答案。

當我做

 B = A; 

在代碼中的某個地方

 B should have a reference of A, right? 

好吧,這意味着BA具有相同的值。 A值的任何進一步更改(例如,使其引用不同的對象)都不會對A產生影響。 但是,如果您更改了AB引用的對象中的數據,則可以通過任一引用看到該更改。

閱讀我有關引用類型和值類型的文章,以獲取更多信息。

有沒有辦法在不使用C的情況下給C提供參考

C = A;

在C#中?

好吧,有多種奇特的方法可以做到。 例如:

public void SetValue<T>(out T target, T value)
{
     target = value;
}

...

SetValue(out C, A);

...但是目前尚不清楚為什么這么做。

我不認為發明一些未定義的“ ZeroObject”會有所幫助,因此我將繼續使用字符串:

string A = "A";
string B = "B";
string C = "C";

//Values are now A, B, C

B = A;

//Values are now A, A, C

C = B;

//Values are now A, A, A

這取決於您的確切意思,說“給C提供參考”。

如果這是關於“指向相同的內存位置”,則將它們彼此分配就足夠了。

所以

    B = A;
    C = B

C將指向相同的A內存空間。

老實說,但這是一種非常奇怪的工作方式。 只需分配參考C=A

如果這不是您要搜索的內容,請進行澄清。

ZeroObject是您自己的一類嗎?

從編程上來說,這聽起來像您想要一個被引用的對象,例如子對象(在這種情況下可能會被稱為)。

因此,理想情況下,您希望ZeroObject類上的另一個屬性為ZeroObject類型-名為ReferenceObject(或您喜歡的任何一種),您可以在其中分配子對象。

public class ZeroObject
{
    //Properties
    ZeroObject ReferenceObject { get; set; }
}

ZeroObject A = new ZeroObject("A");
ZeroObject B = new ZeroObject("B");

A.ReferenceObject = B;

然后只需通過A.ReferenceObject訪問B

您的ZeroObject必須具有相應的屬性

public class ZeroObject
{
    public ZeroObject (string name)
    {
        Name = name;
    }

    public ZeroObject Parent { get; set }

    public string Name { get; private set; }
}

現在,你可以寫

ZeroObject A = new ZeroObject("A");
ZeroObject B = new ZeroObject("B");
ZeroObject C = new ZeroObject("C");
ZeroObject D = new ZeroObject("D");

B.Parent = A;
C.Parent = B;
D.Parent = C;

如果要使用同一對象而不引用它,請檢查該鏈接並使用該基本解決方案。

深度克隆對象

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM