即使只有一个父对象,也不可能简单地抛出一个对象,因为它们可能有不同的接口。
您需要实现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