簡體   English   中英

如何在C#中組合部分類對象?

[英]How to combine a Partial Class Object in C#?

我定義了一個類:

public class Sample{
    public string name {get;set;}
    public int price {get;set}
}

然后

 Sample sampleA = new Sample();
 sampleA.name = "test";

  Sample sampleB = new Sample();
  sampleB.price = 100;

我這樣做是因為我將JSONed sampleA和JSONed sampleB保存到Azure表,以呈現完整的示例對象。 在其他代碼中,有時只需要名稱,有時只需要價格,所以我只需要提取每次需要的數據。 當然,在實際代碼中,樣本的結構要復雜得多。

我的問題是 :是否有任何簡單的方法可以做到:

  Sample sampleC = sampleA + sampleB;

和sampleC應包含:

 sampleC.name = "test";
  sampleC.price = 100;

這實際上與部分類無關。 部分類是單個類,它在“地理上”聲明多於一個文件。

File1.cs:

public partial class File { public string Prop2 { get;set; } }

File2.cs:

public partial class File { public int Prop1 { get;set; } }

這將在編譯時產生:

public partial class File 
{
     public string Prop2 { get;set; } 
     public int Prop1 { get;set; } 
}

對於你的要求。
沒有這樣的方法,它將兩個不同的實例合二為一。 你應該自己寫。

更新:
你可能會問,為什么沒有這樣的方法。 但它如何處理如下情況:

Sample sampleA = new Sample();
sampleA.name = "test";
sampleA.price = 200;

Sample sampleB = new Sample();
sampleB.price = 100;

Sample sampleC = sampleA + sampleB; // what would be the value of price here: from sampleA or sampleB?

你怎么過載+ operator

    public static Sample operator +(Sample left, Sample right)
    {
        left.price = right.price;
        return left;
    }

您可以通過重載類上的+運算符來實現此目的。 像這樣的東西

public static Sample operator +(Sample sampleA, Sample sampleB){
    return new Sample() { Name = sampleA.Name, Price = sampleB.Price };
}

正如Eric Yin在他的回答中所提到的部分類是一個不合適的名稱,因為它完全指的是其他東西。

可以在兩個或多個源文件上拆分類或結構,接口或方法的定義。 每個源文件都包含類型或方法定義的一部分,並且在編譯應用程序時將所有部分組合在一起。

首先,您應該考慮使用加法運算符是否是概念上的好選擇。 產生的對象是明顯的/不明確的是什么?

乍一看,我會通過使用所有非空值來解釋您正在尋找的行為。 當兩個對象具有非空值的相同字段時,您將如何處理?

考慮到這是你所追求的行為,你可以像Gabe的回答一樣重載加法運算符 當您的類/結構只包含可空值時,您可以讓添加將所有值從一個對象復制到另一個對象,其中一個包含值,另一個包含null值。 當兩個對象都包含值時,我會拋出異常。

最后一點,請反思您最終必須如何實現此行為。 我猜你可以解決一個潛在的設計問題 您可能不應該使用僅存儲部分數據的對象。


作為另一種選擇,C#中的新動態關鍵字也會浮現在腦海中。 也可能值得檢查一下。

暫無
暫無

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

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