怎么看这个技术文档

那该多好啊!!! 2018-11-11 11:41:26
关于这个DOCS技术文档不太明白里面派生和实现这一块,


1,为什么这个IDbCommand Interface接口派生出来的DbCommand Class是个类?但是打开它的时候它又说是继承继承
ObjectMarshalByRefObjectComponentDbCommand?

2,IDbCommand Interface实现 IDisposable,可是IDisposable却和它不是一个程序集里面它是在命名空间:System

...全文
97 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 2018-11-13
  • 打赏
  • 举报
回复
首先,public class A{} 这是一个类 public interface IB{} 这是一个接口 比较直观的是,所有接口,在命名规范上都是 I开头,比如IDbCommand,IList。。。。。。 所以你光看就能明白谁是接口,谁是类了。 其次,我们在讨论, 由于c#是单继承的。所以他只会继承自一个父类。 但是可以实现多个接口。 因此,你要很明确的区分,什么叫继承,什么叫实现。 而不是混为一谈。然后纠结这些名字的问题。 所以,最后重申一下, 楼主作为初学者,应该在认真的看看文档。 里面很清楚的说明了。继承和实现。 至于派生这个词,其实也很好理解,所以继承父类或者实现接口的类,都叫做派生类。 他的意义是代表他按照某个协议或者规范产生出来的类。统一叫做派生类。 派生类牵涉到多态的概念。 换句话说我可以
SqlConnection con = new SqlConnection();
            DbCommand a = con.CreateCommand();


            Component b = a;
            IDbCommand c = a;
            IDisposable d = a;
  • 打赏
  • 举报
回复
查资料的时候应该能看到这些说明吧,
引用
一个类可以派生自多个类或接口,这意味着它可以从多个基类或接口继承数据和函数。

引用
c#不支持多重继承,但是可以使用接口实现多重继承。
  • 打赏
  • 举报
回复
引用 16 楼 u010145421 的回复:
[quote=引用 12 楼 z15920696563 的回复:]
[quote=引用 11 楼 hanjun0612 的回复:]
由于统一使用:冒号来代替实现和继承的关键字。
但是你自己应该要明白,一个派生类对于父类和接口的描述是不同的。
一个是继承,一个是实现。

你在查IDbCommand接口或者我上面图片里有,它也派生了DbCommand,那么DbCommand被二个东西给派生了,为什么只说是继承Component[/quote]


是这样的,在docs中微软形成了一个规定,它使用"继承"来说明该对象的父类,大多数时间父类是一个抽象类。如果没有继承类的情况下,此条目不会出现。使用"实现"来说明其继承的接口,使用派生来说泛化关系。这是docs文档规范后的说法。

换句话来说,按照"继承”来说,docs将"继承”的关系细分为两个类型,原来的用的继承有类和接口两种形式,现在用“继承”专指类的继承关系,用“实现”专指接口的继承关系。用“派生”来说明被继承关系(可能被类或接口继承)。

派生的可能是类或接口,这个没有区分。而“继承”以后只描述“类继承关系“,”实现"以后只描述接口继承关系。

所以,IDbCommand派生了一个类DbCommand,反过来可以说DbCommand实现了IDbCommand接口,如果IDbCommand是个类的话,则说是继承。再说Component派生了一个类DbCommand,因为Component是一个类,所以说DbCommand继承了Commponent,不再说实现某个抽象类。
[/quote]
请问大佬 docs中微软的这些规定在哪里有文档,想看一下,
kusirp21 2018-11-13
  • 打赏
  • 举报
回复
引用 12 楼 z15920696563 的回复:
[quote=引用 11 楼 hanjun0612 的回复:]
由于统一使用:冒号来代替实现和继承的关键字。
但是你自己应该要明白,一个派生类对于父类和接口的描述是不同的。
一个是继承,一个是实现。

你在查IDbCommand接口或者我上面图片里有,它也派生了DbCommand,那么DbCommand被二个东西给派生了,为什么只说是继承Component[/quote]


是这样的,在docs中微软形成了一个规定,它使用"继承"来说明该对象的父类,大多数时间父类是一个抽象类。如果没有继承类的情况下,此条目不会出现。使用"实现"来说明其继承的接口,使用派生来说泛化关系。这是docs文档规范后的说法。

换句话来说,按照"继承”来说,docs将"继承”的关系细分为两个类型,原来的用的继承有类和接口两种形式,现在用“继承”专指类的继承关系,用“实现”专指接口的继承关系。用“派生”来说明被继承关系(可能被类或接口继承)。

派生的可能是类或接口,这个没有区分。而“继承”以后只描述“类继承关系“,”实现"以后只描述接口继承关系。

所以,IDbCommand派生了一个类DbCommand,反过来可以说DbCommand实现了IDbCommand接口,如果IDbCommand是个类的话,则说是继承。再说Component派生了一个类DbCommand,因为Component是一个类,所以说DbCommand继承了Commponent,不再说实现某个抽象类。
∽油条á 2018-11-13
  • 打赏
  • 举报
回复
引用 14 楼 z15920696563 的回复:
[quote=引用 13 楼 yibinlaji 的回复:] [quote=引用 12 楼 z15920696563 的回复:] [quote=引用 11 楼 hanjun0612 的回复:] 由于统一使用:冒号来代替实现和继承的关键字。 但是你自己应该要明白,一个派生类对于父类和接口的描述是不同的。 一个是继承,一个是实现。
你在查IDbCommand接口或者我上面图片里有,它也派生了DbCommand,那么DbCommand被二个东西给派生了,为什么只说是继承Component[/quote] 文档里DbCommand 继承 Component,实现IDbCommand这有什么问题?[/quote] 这个我没说有问题啊,我说的是接口IDbCommand派生了DbCommand,而DbCommand里却不说继承了IDbCommand,[/quote] 他没说继承IDbCommand但却说了实现IDbCommand 。你一定要在“继承”和“实现”这两个词上纠结什么?
  • 打赏
  • 举报
回复
引用 13 楼 yibinlaji 的回复:
[quote=引用 12 楼 z15920696563 的回复:]
[quote=引用 11 楼 hanjun0612 的回复:]
由于统一使用:冒号来代替实现和继承的关键字。
但是你自己应该要明白,一个派生类对于父类和接口的描述是不同的。
一个是继承,一个是实现。

你在查IDbCommand接口或者我上面图片里有,它也派生了DbCommand,那么DbCommand被二个东西给派生了,为什么只说是继承Component[/quote]

文档里DbCommand 继承 Component,实现IDbCommand这有什么问题?[/quote]
这个我没说有问题啊,我说的是接口IDbCommand派生了DbCommand,而DbCommand里却不说继承了IDbCommand,
∽油条á 2018-11-13
  • 打赏
  • 举报
回复
引用 12 楼 z15920696563 的回复:
[quote=引用 11 楼 hanjun0612 的回复:] 由于统一使用:冒号来代替实现和继承的关键字。 但是你自己应该要明白,一个派生类对于父类和接口的描述是不同的。 一个是继承,一个是实现。
你在查IDbCommand接口或者我上面图片里有,它也派生了DbCommand,那么DbCommand被二个东西给派生了,为什么只说是继承Component[/quote] 文档里DbCommand 继承 Component,实现IDbCommand这有什么问题?
  • 打赏
  • 举报
回复
引用 11 楼 hanjun0612 的回复:
由于统一使用:冒号来代替实现和继承的关键字。
但是你自己应该要明白,一个派生类对于父类和接口的描述是不同的。
一个是继承,一个是实现。

你在查IDbCommand接口或者我上面图片里有,它也派生了DbCommand,那么DbCommand被二个东西给派生了,为什么只说是继承Component
正怒月神 2018-11-13
  • 打赏
  • 举报
回复
由于统一使用:冒号来代替实现和继承的关键字。 但是你自己应该要明白,一个派生类对于父类和接口的描述是不同的。 一个是继承,一个是实现。
正怒月神 2018-11-13
  • 打赏
  • 举报
回复
引用 9 楼 z15920696563 的回复:
[quote=引用 7 楼 hanjun0612 的回复:] 一个类可以实现多个接口,这个没毛病啊。 我没有太明白楼主的问题意思
1,API上说接口IDbCommand派生System.Data.Common.DbCommand。那么按道理System.Data.Common.DbCommand应该是继承接口IDbCommand的,但是查API,System.Data.Common.DbCommand里却说它是继承Component类,, 也就是说接口派生了一个类,可这个类却继承别的类,这不是有点怪么? 2,查API上说接口IDbCommand实现了IDisposable,而IDisposable是一个接口,怎么能实现IDbCommand呢? 接口只能继承接口,可是这里接口居然可以实现接口, [/quote] 楼主你这个理解有毒啊。。。 我们先看 很明显, DbCommand 继承自Component 而且规定要实现, IDbCommand, IDisposable .net 将extends(继承)和implements(实现)都使用冒号:代替了。 所以下面这个描述没有任何问题。
  • 打赏
  • 举报
回复
引用 7 楼 hanjun0612 的回复:
一个类可以实现多个接口,这个没毛病啊。
我没有太明白楼主的问题意思

1,API上说接口IDbCommand派生System.Data.Common.DbCommand。那么按道理System.Data.Common.DbCommand应该是继承接口IDbCommand的,但是查API,System.Data.Common.DbCommand里却说它是继承Component类,,
也就是说接口派生了一个类,可这个类却继承别的类,这不是有点怪么?
2,查API上说接口IDbCommand实现了IDisposable,而IDisposable是一个接口,怎么能实现IDbCommand呢?
接口只能继承接口,可是这里接口居然可以实现接口,
∽油条á 2018-11-13
  • 打赏
  • 举报
回复
继承跟在不在同一个程序集或者命名空间没啥关系
正怒月神 2018-11-13
  • 打赏
  • 举报
回复
一个类可以实现多个接口,这个没毛病啊。 我没有太明白楼主的问题意思
  • 打赏
  • 举报
回复
[quote=引用 3 楼 sp1234 的回复:]
1,A派生B,必然说B是继承A是么,但这里接口IDbCommand派生System.Data.Common.DbCommand
可是System.Data.Common.DbCommand里却说它是继承Component类,,
2,接口的实现应该是一个类吧,这里IDbCommand的实现IDisposable,它又是一个接口,
  • 打赏
  • 举报
回复
你说的我都知道不过,这二个问题和资料上看的确实有点不一样,
1,A派生B,必然说B是继承A是么,但这里接口IDbCommand派生System.Data.Common.DbCommand
可是System.Data.Common.DbCommand里却说它是继承Component类,,
2,接口的实现应该是一个类吧,这里IDbCommand的实现IDisposable,它又是一个接口,
  • 打赏
  • 举报
回复
比如说“神州飞船”是一个运载工具,然后我们又说“神舟飞船是一个飞行器,同时也是一个桶”,这就是最基本面向对象概念。再比如说,例如,手机是一个通讯设备,也是一个照明工具,还是一个饰品,还可以是一个钱包或者银行卡.......这都是基本概念。如果基本的 OOAD 概念还没有正规学过,看技术文档就等于6岁小孩儿看20岁人看的小说。
  • 打赏
  • 举报
回复
遇到问题不善于综合、不改变自己、不编程实践,而只知道最浅层的皮毛,这个时候就会仅仅挑字眼儿的毛病,而不能挑出深入的问题。
  • 打赏
  • 举报
回复
难道 class 不可以实现 interface 吗?你是怎么学 c# 语言基本概念的呢? 不管是 interface 还是 class,在设计上都是“类型”,而且用来实现面向对象的继承和多态,都可以说是继承。“咬文嚼字的时候”非要说“interface只能说‘实现’不能说‘继承’”这是比较抠字眼儿的说法。c#/net 和 java 这类东西不支持多重继承,所以弄出了什么 interface 概念来模拟人家多重继承技术,那么别的 OOPL 语言呢?那些真正支持多重继承技术的编程语言难道就要因为你纠结字眼儿而说不是面向对象了吗?所以抠字眼儿而背离了面向对象基本概念(就好像硬说白马不是马)就不对了。 一个 interface 也可以声明为需要实现其它 interface。同样地,谁跟你说必须声明为同一个 namingspace 呢? 一个人学习知识,首先是要全盘接受,然后找出你所学到的知识体系“它自己的”矛盾来。不是什么都没学进去时,就开始纠结字眼儿。

110,571

社区成员

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

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

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