有没有一种方法可以在不同类型的不同组件之间强制转换?我需要执行一个函数,该组件的程序集已用Assembly.Load(ReadAllBytes(...))加载,但是在参数转换中失败。那么,有什么方法可以在C#中“ reinterpret_cast”对象吗?
编辑
我的投放问题的最基本示例是:
Assembly ass = Assembly.Load(File.ReadAllBytes("external.dll"))
object other_type_instance = ass.GetType("OtherType").InvokeMember(null, BindingFlags.CreateInstance, null, null, new Object[]{});
OtherType casted_isntance = (OtherType)other_type_instance; // fails with runtime error, because there are two OtherType:s classes loaded.
最佳答案
除非这两种类型具有继承关系,否则,如果没有一个公共接口,或者其中一种类型可以为另一种类型提供转换操作符...否。
如果您需要更具体的建议,则必须提供一些其他详细信息,但这是C#中强制转换行为的简要说明。
使用C#进行强制转换可以是表示保留操作,也可以是更改表示的操作。当您将实例转换为继承层次结构中的较宽或较窄的类型,或对其实现的接口进行转换时,您将执行保留表示的转换。您仍在处理相同的位,编译器/运行时仅确保您指定的类型对于要处理的对象的实例有效。跨继承继承或到实例未实现的接口的强制转换是非法的。
对于自定义类型,更改表示形式的转换实质上是从现有实例创建新实例的转换。您可以为类型定义自己的转换运算符:
public class MyType
{
public static int implicit operator int( MyType t )
{
return 42; // trivial conversion example
}
}
Conversion operators可以定义为
implicit
或explicit
-确定编译器是选择为您应用它们(隐式)还是要求您在希望进行转换时显式转换类型(显式)。根据您的描述,您可能需要编写一个实用程序类,以执行从一种类型到另一种类型的转换。不幸的是,C#或.NET内置没有任何功能可以为您完成此操作。
关于c# - 在C#中强制将一种装配类型转换为另一种装配类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2814480/