我有一个名为 A 的类和一个名为 B 的类
public class A : UserControl { }
public class B : UserControl { }
现在我有一个程序集,其类的函数接受类 A 的对象。这个程序集不是我创建的,所以我没有任何控制权。基本上是第 3 方组装。
但我想提供我的 B 类对象,因为它有点定制化。请放心,它包含 A 类的所有属性。我如何将我的 B 类对象类型转换为类型 A,以便我可以将第 3 方程序集集成到我的项目中,并根据我的需要自定义外观?
如果我像 (A)objB
这样的东西是不允许的。然后我试了这个:
UserControl control = objB as UserControl;
A objA = control as A;
但这种情况下的问题是 objA 为空。
为避免混淆:A 类和组件由第 3 方提供。
提前致谢:)
最佳答案
鉴于您的层次结构,您将不得不编写一个转换运算符。通常没有内置的方法来执行此操作(想想 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
之间的所有公共(public)属性复制到 a
。
关于c# - 将一个对象转换为另一种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4257960/