c# - 将一个对象转换为另一种类型

标签 c# user-controls casting as-operator

我有一个名为 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 : AnimalCat : 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/

相关文章:

c# - 我怎样才能选择一个记录而不是另一个记录?

c# - 具有内置 WebKit 页面预览的 Web 开发应用程序

c# - WPF事件捕获新添加的控件?

c++ - 从 ‘const BYTE* {aka const unsigned char*}’ 到 ‘BYTE_PTR {aka unsigned char*}’ 的无效转换

Java 泛型扩展仍然会生成未经检查的强制转换警告

c# - JSON.NET 将嵌套接口(interface)列表解析为具体类

c# - 如何使用核心服务根据 Tridion 中的描述获取特定的 tcm uri?

c# - 如何创建以下用户界面?

c# - 将自定义 UserControl 添加到 Visual Studio 2005 的工具箱

c - C 中的函数指针困难,int (*foo(enum int var))(int)