我想从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";
}
}
我已经测试了几个小时,但是失败了。
答案 0 :(得分:0)
您不能覆盖静态方法。您需要制作一个虚拟或抽象实例方法。
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
静态也没有多大意义,因为无论如何您都创建一个单例实例。
您可以签出代码here。