实现DbCommand并不实现所有抽象类

时间:2011-01-03 19:29:35

标签: c# ado.net abstract-class implementation

我尝试实现抽象的DbCommand类(比如OdbcCommand,OleDbCommand,...),但我不明白的是为什么当我写的时候:

internal sealed class SybaseCommand : DbCommand, IDisposable

我要求VS2008实现所有抽象类,它不会自动生成每个方法/属性的所有覆盖存根。

以下是MSDN DbCommand类:http://msdn.microsoft.com/en-us/library/system.data.common.dbcommand.aspx

它不会为“Connection”,“CanRaiseEvents”/ ...的属性生成存根,而不会生成ExecuteReader()的存根。

你能告诉我为什么吗?我错过了什么?

感谢您的帮助:)

[编辑]

对于ExecuteReader()方法,有3种方法

public DbDataReader ExecuteReader()
public DbDataReader ExecuteReader(CommandBehavior behavior)
protected abstract DbDataReader ExecuteDbDataReader(CommandBehavior behavior)

我可以假设两种公共方法都只调用受保护的方法吗?

1 个答案:

答案 0 :(得分:0)

正如asawyer所说,覆盖实际可以覆盖的方法和属性,即virtualabstract成员,这才有意义。

要“覆盖”非虚拟或非抽象成员,您必须使用new modifier。 E.g。

public new DbDataReader ExecuteReader()

这有一些常见的缺点,如MSDN reference article中所述。