发现一个奇怪的继承现象

weixin_41403416 2017-12-15 09:51:20
在System.Data.dll的程序集元数据里看到的一个现象:
public interface IDbDataAdapter : ......
{

IDbCommand DeleteCommand { get; set; }

IDbCommand InsertCommand { get; set; }

IDbCommand SelectCommand { get; set; }

IDbCommand UpdateCommand { get; set; }

......
}

public abstract class DbCommand : IDbCommand,......
{
......
}

public abstract class DbDataAdapter : IDbDataAdapter,......
{

public DbCommand DeleteCommand { get; set; }

public DbCommand InsertCommand { get; set; }

public DbCommand SelectCommand { get; set; }

public DbCommand UpdateCommand { get; set; }

......
}

这样是怎么通过编译的? 我自己写了一段却不行 提示DbDataAdapter 未实现接口IDbDataAdapter的成员方法

求大牛赐教~~~~~
...全文
122 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 2017-12-15
  • 打赏
  • 举报
回复
引用 4 楼 weixin_41403416 的回复:
[quote=引用 3 楼 正怒月神的回复:]这就说明,你没有全部实现IDbDataAdapter的抽象方法和接口
IDbDataAdapter只有这4个属性接口……[/quote] 你还要看看IDbDataAdapter继承了IDataAdapter接口。那么IDataAdapter接口的也要实现
weixin_41403416 2017-12-15
  • 打赏
  • 举报
回复
明白了, 原来 DbDataAdapter 里的这4个属性并不是实现IDbDataAdapter 的那4个属性... 真正接口的4个属性已经被显式实现了 所以在元数据里看不到... 尼玛 这..陷阱啊~~~
cheng2005 2017-12-15
  • 打赏
  • 举报
回复
都跟你说了是显示实现,还想问什么?
weixin_41403416 2017-12-15
  • 打赏
  • 举报
回复
大家可以看一下ADO的System.Data里几种数据库的实现 OLE SQL Oralce,都是这种造型......
weixin_41403416 2017-12-15
  • 打赏
  • 举报
回复
引用 7 楼 qq_30335331的回复:
[quote=引用 6 楼 weixin_41403416 的回复:] 自己写的测试代码: interface ITest { } interface ITest2 { ITest Test { get; set; } } abstract class ClassA:ITest { } abstract class ClassB : ITest2 { public ClassA Test { get; set; } } 逻辑结构应该是跟上面一样的,却提示ClassB不能实现接口成员ITest2.Test
你classb 确实没有实现ITest2.Test接口呀[/quote] 对啊,上面的DbDataAdapter也没有实现IDbDataAdapter啊,我就想搞清楚这程序集是怎么生成的所以才写了这样一段代码……
qq_30335331 2017-12-15
  • 打赏
  • 举报
回复
引用 6 楼 weixin_41403416 的回复:
自己写的测试代码: interface ITest { } interface ITest2 { ITest Test { get; set; } } abstract class ClassA:ITest { } abstract class ClassB : ITest2 { public ClassA Test { get; set; } } 逻辑结构应该是跟上面一样的,却提示ClassB不能实现接口成员ITest2.Test
你classb 确实没有实现ITest2.Test接口呀
weixin_41403416 2017-12-15
  • 打赏
  • 举报
回复
自己写的测试代码: interface ITest { } interface ITest2 { ITest Test { get; set; } } abstract class ClassA:ITest { } abstract class ClassB : ITest2 { public ClassA Test { get; set; } } 逻辑结构应该是跟上面一样的,却提示ClassB不能实现接口成员ITest2.Test
mCsharp 2017-12-15
  • 打赏
  • 举报
回复
顶一下,继承的用法始终没完全理解
weixin_41403416 2017-12-15
  • 打赏
  • 举报
回复
引用 3 楼 正怒月神的回复:
这就说明,你没有全部实现IDbDataAdapter的抽象方法和接口
IDbDataAdapter只有这4个属性接口……
正怒月神 2017-12-15
  • 打赏
  • 举报
回复
这就说明,你没有全部实现IDbDataAdapter的抽象方法和接口
weixin_41403416 2017-12-15
  • 打赏
  • 举报
回复
引用 1 楼 cheng2005的回复:
估计你看的代码不全,感觉这种做法是DbDataAdapter把IDbDataAdapter接口显式实现了。
确实是显示实现了,我代码确实没放全,太多了 单接口实现,显示跟隐世实现还有什么区别吗?
cheng2005 2017-12-15
  • 打赏
  • 举报
回复
估计你看的代码不全,感觉这种做法是DbDataAdapter把IDbDataAdapter接口显式实现了。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧