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