【发布时间】:2018-07-13 15:29:19
【问题描述】:
我知道这只能通过workaround 实现。但为什么呢?
我想为我的应用添加插件支持。所以我设计了一个抽象类,所有未来的插件都需要实现它。每个插件都必须实现一个GetVersion() 方法,就像这个示例代码:
public abstract class Plugin
{
public abstract int GetVersion();
}
public class MyPlugin : Plugin
{
public override int GetVersion()
{
return 1;
}
}
只要我在调用GetVersion() 方法之前实例化插件,这当然可以完美运行。
但如果我想在创建插件实例之前获取插件的版本号?例如检查兼容性?
public class Program
{
public Program()
{
if (MyPlugin.GetVersion() > 1)
{
PluginLoader.Load(new MyPlugin());
}
}
}
【问题讨论】:
-
在创建实例时继承是有意义的。换句话说,它适用于 Objects 而不是类。即使有可能,也不会毫无收获。例如,如果您需要使用静态方法,则需要使用类的名称访问它:
ClassName.Do(),如果您被允许继承和覆盖它,那么您将访问它:InheritingClass.Do()那么到底是什么收获:你还是写了类名和方法名。 -
你是如何获得版本的?
标签: c# oop plugins architecture