none
关于二次开发的体会,不知道有没有错,敬请指教 RRS feed

  • 问题

  • 有时候,接口可以近似看做一个类,可以用来声明一个引用,指向这个类的实例,有时可以将I字母去掉就当做一个类;


    以地图为例,一个地图类,如果将某些接口看作成一个类,那么地图包含了例如上面的类,

    每个类有自己的方法和属性,但如果以“内嵌类”的方式来调用其中一个类的方法,可能会造成不必要的麻烦,由于接口能声明属性,方法,所以以接口继承的方式,来使地图对象有这种包含关系。接口中,以接口(这个接口能近似看做一个类)定义属性,也实现了这种层次的形式。

    2014年1月16日 17:46

答案

  • 1.性能(你说的效率)不能脱离具体的实现来说吧。

    2.接口是一种契约或约定。

    3.当然,你说的类里面包含太多的东西,这的确不是好的设计方式。这是面向对象的设计原则问题,尽量使类保持职责单一,内聚,对外界依赖程度低是类设计的基本原则。

    • 已标记为答案 yaoly 2014年1月17日 6:11
    2014年1月17日 5:16

全部回复

  • 首先要说明接口和类都是引用类型

    但是接口只是定义了未实现的方法或者属性、事件,只是一组“契约”,具体由哪些类去实现是未知的。而类的方法一般必须具体实现。这是他们本质上的区别。

    >有时可以将I字母去掉就当做一个类

    这只是命名规则不同(一般接口总是I开头),如果你用interface关键字的话去掉“I"还是接口,要看其本质是不是类还是接口决定。


    ASP.NET Questions
    Other Discussions
    FreeRice Donate
    Issues to report
    Free Tech Books Search

    2014年1月17日 1:53
    版主
  • 您所说的确实如此;

    我在Arcgis Engine二次开发中,发现ESRI公司似乎不太喜欢定义太多的类,喜欢使用一个类去实现大部分方法,而这些方法本应该分别用不同的类去实现,但由于在客观世界中,例如地图,包含要素类,书签类,图层类等等,为了实现这种层次结构,使用了接口去“约定”,所以有这样的“错觉”;

    可能事实上ESRI公司不是我所说的那样,我想问的是,我这种想法合不合理?由于我不是学计算机出身的,所以还想问,这样会不会降低效率?
    • 已编辑 yaoly 2014年1月17日 4:23
    2014年1月17日 4:17
  • 如果要产生一系列对象,而这些对象又具备相似的功能特性,建议使用“抽象类”而不是接口。

    “接口”只是告诉对象“你必须实现什么”,因此一个对象类可以实现多个接口,而这些接口可能毫无关系。


    ASP.NET Questions
    Other Discussions
    FreeRice Donate
    Issues to report
    Free Tech Books Search

    2014年1月17日 4:56
    版主
  • 您所说的有道理

    一个子类只能继承一个父类,但可以实现多个接口,但考虑到一种包含关系,如一个箱子的类,可能装很多东西,诸如玩具,书籍等等,实现  I玩具,I书籍中的属性和方法不是更好吗?这样就不用使类一重一重地继承了。

    2014年1月17日 5:05
  • 1.性能(你说的效率)不能脱离具体的实现来说吧。

    2.接口是一种契约或约定。

    3.当然,你说的类里面包含太多的东西,这的确不是好的设计方式。这是面向对象的设计原则问题,尽量使类保持职责单一,内聚,对外界依赖程度低是类设计的基本原则。

    • 已标记为答案 yaoly 2014年1月17日 6:11
    2014年1月17日 5:16
  • 一个箱子的类,可能装很多东西,诸如玩具,书籍等等,实现  I玩具,I书籍中的属性和方法不是更好吗?这样就不用使类一重一重地继承了。

    包含关系的话不应该直接实现接口,那是因为“箱子”类并不具备“玩具”、“书籍”等特性。而是应该用类似List<I玩具>等容器类去装载实现具体接口的玩具或者书籍更好。

    ASP.NET Questions
    Other Discussions
    FreeRice Donate
    Issues to report
    Free Tech Books Search

    2014年1月17日 5:17
    版主
  • 谢谢您的宝贵意见,也许我对二次开发组件理解得还不够深入吧
    2014年1月17日 6:11