首页 > 解决方案 > 如何从 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";
   }
}

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

标签: c#

解决方案


您不能覆盖静态方法。您需要创建一个虚拟或抽象实例方法。

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静态也没有多大意义,因为无论如何您都会创建一个单例实例。

你可以在这里查看代码。


推荐阅读