[英]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.