gpt4 book ai didi

c# - 在 C# 中强制将一种程序集类型转换为另一种程序集类型

转载 作者:行者123 更新时间:2023-11-30 20:12:15 25 4
gpt4 key购买 nike

有没有办法在不同类型的不同程序集之间进行强制转换?我需要执行一个函数,其程序集已使用 Assembly.Load(ReadAllBytes(...)) 加载,但在参数转换中失败。那么,有什么方法可以在 C# 中“重新解释_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.

最佳答案

除非这两种类型共享继承关系、公共(public)接口(interface),或者其中一种类型为另一种类型提供转换运算符……否。

如果您需要更具体的建议,您将不得不提供一些额外的详细信息,但这里是 C# 中转换行为的一般概述。

C# 中的转换可以是表示保留 操作或表示更改 操作。当您将实例转换为继承层次结构中更宽或更窄的类型,或转换为它实现的接口(interface)时,您正在执行表示保留转换。您仍在处理相同的位,编译器/运行时只是确保您指定的类型对您正在处理的对象的实例有效。跨继承层次结构或未由实例实现的接口(interface)进行强制转换是非法的。

对于自定义类型,表示更改类型转换本质上是从现有实例创建新实例的类型。您可以为类型定义自己的转换运算符:

public class MyType
{
public static int implicit operator int( MyType t )
{
return 42; // trivial conversion example
}
}

Conversion operators可以定义为 implicitexplicit - 这决定了编译器是否会选择为您应用它们(隐式)或要求您在需要时显式转换类型转换(显式)。

根据您的描述,您可能需要编写一个实用程序类来执行从一种类型到另一种类型的转换。不幸的是,C# 或 .NET 中没有任何内置功能可以为您执行此操作。

关于c# - 在 C# 中强制将一种程序集类型转换为另一种程序集类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2814480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com