【发布时间】:2014-11-25 17:19:44
【问题描述】:
我正在编写可用于不同数据库引擎的库。抽象类具有抽象 DbParameter 构造函数并使用 System.Data.Common 中的类。
现在我有了 sutch 结构:
public abstract class ASqlWorker{
abstract protected DbParameter DbParameterConstructor(String paramName, Object paramValue);
}
现在,我可以从 ASqlWorker 的静态方法调用 abstract DbParameterConstructor 吗?
逻辑上,我可以将 abstractMethod 设为静态(它从名称和值创建 DbParameter 继承者的实例,并且不使用 ASqlWorker 的字段),但在 C# 中是不允许的。 顺便说一句,这是不允许的,因为使用未实现的静态方法会导致麻烦。但在我的情况下不会,因为我的抽象方法受到保护。
我只是想写一些从 DbParameter 到 new DbParameter[1] 的隐式转换器,以获得更灵活的接口。
【问题讨论】:
-
你需要一个实例来调用非静态方法。
-
如果不引用类的实例,就不能从静态方法调用实例方法。
-
您希望在这里使用哪个派生类实现?您的整个前提是
ASQLWorker不知道如何实现该方法,并且可能有许多不同的派生。你想用哪一个?
标签: c# static virtual abstract