C#从静态方法调用抽象方法
我正在编写一个库,它可以用于不同的数据库引擎。抽象类具有抽象DbParameter构造函数,并使用System.Data.Common中的类 现在我有了sutch结构:C#从静态方法调用抽象方法,c#,static,virtual,abstract,C#,Static,Virtual,Abstract,我正在编写一个库,它可以用于不同的数据库引擎。抽象类具有抽象DbParameter构造函数,并使用System.Data.Common中的类 现在我有了sutch结构: public abstract class ASqlWorker{ abstract protected DbParameter DbParameterConstructor(String paramName, Object paramValue); } 现在,我可以从ASqlWorker的静态方法调用abstractD
public abstract class ASqlWorker{
abstract protected DbParameter DbParameterConstructor(String paramName, Object paramValue);
}
现在,我可以从ASqlWorker的静态方法调用abstractDbParameterConstructor吗
从逻辑上讲,我可以将abstractMethod设置为静态(它根据name和value创建DbParameter继承者的实例,并且不使用ASqlWorker的字段),但在C#中不允许这样做。
顺便说一句,这是不允许的,因为使用未实现的静态方法可能会导致故障。但在我的情况下,它不会,因为我的抽象方法受到保护
我只想编写一些从DbParameter到新DbParameter[1]的隐式转换器,以具有更灵活的接口。您的问题假设您可以在抽象“实例”上调用方法,我们都知道这是不可能的,但是,如果定义了
子类
,并且您正在对抽象基类的具体实现的实例调用抽象定义的方法,那么答案是肯定的。但这里的要点是必须对实例调用实例方法
这是可能的:
ASqlWorker a = new SubClassesASqlWorker(); //<-- assume you extending ASqlWorker and implemented it
ASqlWorker a = new ASqlWorker();
您可以使用抽象类型的参数定义静态方法,但只能传递完全实现的对象和抽象类的子类。我做到了
哈哈,我用C#实现了抽象静态方法
我做了什么:
- 创建了抽象类AbstractDbParameterConstructors,它不包含任何状态,只包含抽象方法
- 类ASqlWorker现在从AbstractDbParameterConstructors中继承得到泛型
public abstract partial class ASqlWorker<TPC> where TPC : AbstractDbParameterConstructors, new() { ... }
details:您需要一个实例来调用非静态方法。如果没有对类实例的引用,则无法从静态方法调用实例方法。您希望在此处使用哪个派生类实现?您的整个前提是,
ASQLWorker
不知道如何实现该方法,并且可能存在许多不同的设想。你想用哪一个?你说得对。重点是在ASqlWorker静态方法中创建,该方法生成DbConnection和DbParameter。然后在ASqlWorker的非静态方法中使用这些方法来实现一些普通逻辑。ASqlWorker的继承者只实现生成器,我得到了可移植库。
private static TPC generator = new TPC();