我尝试实现抽象的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)
我可以假设两种公共方法都只调用受保护的方法吗?
答案 0 :(得分:0)
正如asawyer所说,覆盖实际可以覆盖的方法和属性,即virtual
和abstract
成员,这才有意义。
要“覆盖”非虚拟或非抽象成员,您必须使用new
modifier。 E.g。
public new DbDataReader ExecuteReader()
这有一些常见的缺点,如MSDN reference article中所述。