c# - 如何通过DLL中的接口调用内部类方法
问题描述
在我的 Xamarin.iOS 绑定项目中,我在 ApiDefinition.cs 中定义了以下接口
[BaseType(typeof(LSMAHandler))]
[Protocol, Model]
interface LSMAHandlerRegister
它在我的项目/obj/Debug/ios/project 中生成了 LSMAHandlerRegister.g.cs。该文件包含以下内容
- 公共接口 ILSMAHandlerRegister : INativeObject, IDisposable,SightCallBinding.ILSMAHandler
- 内部密封类 LSMAHandlerRegisterWrapper : BaseWrapper, ILSMAHandlerRegister
- 公共不安全抽象部分类 LSMAHandlerRegister : LSMAHandler, ILSMAHandlerRegister
我已将生成的 DLL 添加到我的 xamarin.ios 项目中。现在我想在上面的类中调用 RegisterWithURL 方法。但是该方法的实现仅在内部包装类中可用。如何在我的 Xamarin.iOS 项目中调用此方法?
解决方案
简单的答案 - 你不能。内部类在 dll 中不可见。不过,您可以做一些事情。
首先想想为什么这个类是内部的。这可能有一个重要的原因。你可以做的事情(你必须有权访问这个项目)
- 公开类和接口(也许没有理由让它成为内部的)
- 使用
InternalsVisibleTo
https://docs.microsoft.com/pl-pl/dotnet/api/system.runtime.compilerservices.internalsvisibletoattribute?view=netframework-4.8 - 但是请注意,这被认为是一种不好的做法,不应该这样做。一个例外是测试项目。您可以显示内部结构来测试项目。那有时可能还可以。
创建其他使用此内部公共类的公共类,例如:
public class MyPublicHelper
{
public void CallMyInternalMethod()
{
MyInternalClass obj = new MyInternalClass();
obj.MyInternalMethod();
}
}
推荐阅读
- ios - "预期解码字典
但找到了一个数组。”,基础错误:无 - algorithm - 为什么具有 2 个队列和排序输入的霍夫曼代码算法是 O(n)
- php - php zip提取使文件为空
- tcl - 请解释一下Tcl中的proc命令
- sql - SQL Server 中的动态多轴
- wordpress - 如何将自定义语言添加到 wpml_browser_redirect_params
- python - 将动态 XML 文件转换为 CSV 文件 - Python
- elasticsearch - ElasticSearch 7.7 如何增加整个索引的结果计数
- sql-server - Apache Camel 3.x + Spring Boot + JDBC 数据源:java.lang.IllegalStateException:找不到支持的数据源类型
- mysql - 使用子查询