如何从DLL导出覆盖静态方法

时间:2019-06-07 11:50:59

标签: c#

我想从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";
   }
}

我已经测试了几个小时,但是失败了。

1 个答案:

答案 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