即使只有一個父對象,也不可能簡單地拋出一個對象,因爲它們可能有不同的接口。
您需要實現ChildA(或ChildB)的顯式或隱式運算符。
var a = new ClassA() {Property1 = "test"};
ClassB b = (ClassB)a;
Console.WriteLine(b.Property2); // output is "test"
在第一種情況下,你可以省略明確地定義類型轉換,寫就像這樣:
class ClassA
{
public string Property1 { get; set; }
}
class ClassB
{
public string Property2 { get; set; }
public static implicit operator ClassB(ClassA classA)
{
return new ClassB() { Property2 = classA.Property1 };
}
}
或
class ClassA
{ {
public string Property1 { get; set; }
public static explicit operator ClassB(ClassA classA)
{
return new ClassB() { Property2 = classA.Property1 };
}
}
class ClassB
{
public string Property2 { get; set; }
}
和實施conversings運營商下面的代碼將正常工作後
var a = new ClassA() {Property1 = "test"};
ClassB b = a;
最後,如果你想只同步父類的屬性,你可以在父母直接寫轉換器:
class Parent
{
public string ParentProperty { get; set; }
public static T1 Convert<T1>(Parent obj) where T1 : Parent, new()
{
var result = new T1();
result.ParentProperty = obj.ParentProperty;
return result;
}
}
使用(家長ClassA和ClassB的孩子的):
var a = new ClassA();
a.ParentProperty = "test";
ClassB b = Parent.Convert<ClassB>(a);
Console.WriteLine(b.ParentProperty); // output is "test"
@Chau:我認爲使用兒童/兒童和父母類可能會產生誤導。它給人的印象是孩子們彼此之間是可以投擲的。在你的例子中使用這種命名約定的事實可能是因爲你有這樣的傾向。但是我可能是錯的:P – 2009-12-04 11:19:54