铸造一个目的是另一种类型的
-
27-09-2019 - |
题
我一类命名为A和一个B类
public class A : UserControl { }
public class B : UserControl { }
现在我有一个组件,它的类的函数接受A类此组件不是由我创造,所以我没有任何控制的对象。基本上它是第三方组件。
,但我想提供我的B类的对象,因为它是位定制。放心它包含A类的所有属性,我怎么能强制转换我的B类的对象,以A型,这样我可以在我的项目组装集成第三方以及自定义外观和感觉,根据我的需求?
如果我所以像(A)objB
它是不允许的。然后我试图这样:
UserControl control = objB as UserControl;
A objA = control as A;
但是,在这种情况下的问题是objA为空。
要避免混淆:类A和组件由第三方提供的。
在预先感谢:)
解决方案
由于您的层次结构,你将不得不写一个转换操作符。有没有内置的方式做到这一点一般的(认为Dog : Animal
和Cat : Animal
):
public static explicit operator A(B b) {
// code to populate a new instance of A from b
}
您也可以使用一个通用的反射框架,这样做
public static void PropertyCopyTo<TSource, TDesination>(
this TSource source,
TDestination destination
) {
// details elided
}
,那么你可以说
// b is B
// a is A
b.PropertyCopyTo<A>(a);
这将b
之间复制所有共同属性a
。
不隶属于 StackOverflow