c# - 如何从 DLL 导出中覆盖静态方法
问题描述
我想从 DLL 导出中覆盖静态方法
public class Export {
[DllExport] public static string plugin_name() { return Plugin.Instance.plugin_name(); }
}
public class Plugin<T> where T: Plugin<T>, new()
{
private static readonly Lazy<T> val = new Lazy<T>(() => new T());
public static T Instance { get { return val.Value; } }
protected Plugin() { }
public new static string plugin_name() { }
}
}
所以这些类现在在一个 dll 文件中,我希望使用 dll 的人只在主类中这样做。
public class Main : Plugin<Main> {
public override string plugin_name() {
return "a test plugin";
}
}
我已经测试了几个小时但失败了。
解决方案
您不能覆盖静态方法。您需要创建一个虚拟或抽象实例方法。
public abstract class Plugin<T> where T : new()
{
private static readonly Lazy<T> val = new Lazy<T>(() => new T());
public static T Instance { get { return val.Value; } }
protected Plugin() { }
public abstract string plugin_name();
}
public class Main : Plugin<Main> {
public override string plugin_name() => "a test plugin";
}
使方法plugin_name
静态也没有多大意义,因为无论如何您都会创建一个单例实例。
你可以在这里查看代码。
推荐阅读
- html - 如何修复移动的导航栏底部手机
- amazon-web-services - Orange API:如何使用来自 Live Objects 的 HTTP 在 AWS 上发布?
- netlogo - Netlogo,检查两个代理是否连接到同一个代理
- javascript - 使用 Web.config 中的选项填充 HTML 选择
- javascript - 如何删除单元格中的按钮并将其替换为文本/数字?
- python - 获取 JSON 数据的特定值
- python - 使用分隔符列出的列
- c++ - 如何在c ++中的给定索引处插入列表中的项目
- mysql - 一个获取嵌套结果的 MySQL 查询?
- python - pandas 根据重复的索引数据框创建多个数据框