vb.net接口继承:VB.NET的旅( 9)—接口继承

  大李拍了拍我肩膀说:“你真有想象力不过有很多文献把这种用Implements来实现接口思路方法就称为接口继承其实接口自己也是可以进行继承在VB.NET中把接口间继承形式称为接口继承

  我不禁跟着笑了起来:“接口继承要成为继承当然要用Inherits对吧?”

  大李点点头说:“既然你都清楚了那你来模拟个下拉框Combobox接口吧

  “Combobox?”我不禁不过会就想明白了“是不是要让它符合有文本框供文字输入和下拉列表供选择列表项组合形式这样外观?”

  大李跟着提醒了我句:“接口和VB.NET中类继承还是有区别它可以支持从多个接口进行多重继承VB.NET中类只支持单基类继承

  见大李没什么别意见我就开始写起代码来:

  Interface IControl
   Sub Pa
  End Interface
  Interface ITextBox
  Inherits IControl
  ‘在文本框设置文本
   Sub SetText(ByVal text As String)
  End Interface
  Interface IListBox
  Inherits IControl
  ‘在下拉列表设置列表项
   Sub SetItems(ByVal items As String)
  End Interface
  Interface IComboBox
   Inherits ITextBox, IListBox
  End Interface
  Class CHenry
   Implements IComboBox
   Sub SetText(ByVal text As String) Implements ITextBox.SetText
   '实现代码
   End Sub
   Sub SetItems(ByVal items As String) Implements IListBox.SetItems
   '实现代码
   End Sub
  ……


  写到这发现CHenry类中Implements IcomboBoxICombobox下面还有条波浪线介绍说明接口并没有实现完毕可是我已经把IComboBox继承两个基接口中思路方法都已经实现了呀把鼠标靠近波浪线系统提示“必须为接口IControl实现sub Pa于是我就继续写:

  Sub Pa Implements IControl.Pa
   '实现代码
   End Sub
  End Class


  我转回头问大李:“接口实现类中是不是要把接口所有基接口都要实现遍呀?”

  大李点点头说:“如果象这个演练中情况当然是要把基接口中没有实现思路方法进行实现但也要注意实现接口类或结构会隐式地实现该接口所有基接口如果个接口在基接口可传递闭包中多次出现成员只参和次构成派生接口实现派生接口类型只需实现次多次定义基接口思路方法所以你也可以用Sub Pa Implements ITextbox.Pa或是Sub Pa Implements IListBox.Pa来代替但只能用这 3个定义中你再来看这段代码”大李开始修改起刚写好代码来:

  Interface IControl
   Sub Pa
  End Interface
  Interface ITextBox
  Inherits IControl
  ‘在文本框设置文本
  Sub SetText(ByVal text As String)
  Shadows Sub Pa
  End Interface
  Interface IListBox
  Inherits IControl
  ‘在下拉列表设置列表项
   Sub SetItems(ByVal items As String)
  End Interface
  Interface IComboBox
   Inherits ITextBox, IListBox
  End Interface
  Sub test(ByVal x As IComboBox)
   x.Pa
  End Sub


  “这里x.Pa是哪个接口思路方法?IControl是ITextBox?”大李脸笑意真是气人但是我应该可以回答上来我按类隐藏概念回忆了下(详见前文重载和隐藏)明白了它当然是它直接被派生那个基类中思路方法呀

  “是ITextBox中思路方法吧!”

  “可以呀不错!”大李简单地夸了我然后喝了口水继续说:“基接口成员名称在继承分层结构条路径中被隐藏但它在其它路径中不会被隐藏比如我们可以从IlistBox中去继承Icontrol中Sub Pa

  “可是在您这个举例中sub test里x是接口例子吗?可是接口还没有实现呀?”我还是有问题要问

  “test思路方法其实可以接受任何将 IComboBox 实现为小部件参数对象即使对接口 IComboBox 实现可能相差很大”大李回答道

  “是不是说我们在使用时候可以用实现IComboBox接口比如CHenry个例子去代替x?”

  大李笑着说:“基本上差不多了你自己慢慢考虑吧还有个问题比较有意思:实现类中用于实现接口思路方法或属性名倒不用和接口中定义名字只要参数列表和返回类型致就行了比如在CHenry中sub Pa如果更名为sub xxx也是可以只要后面跟着Implements IControl.Pa就行了命名定要有规划不然接口继承中也会带来命名重复造成问题我们来看

  Interface IHenry1
   Property yyy As Integer
  End Interface
  Interface IHenry2
   Sub yyy(ByVal i As Integer)
  End Interface
  Interface IHenryDerived
   Inherits IHenry1
   Inherits IHenry2
  End Interface
  Sub test(ByVal x As IHenryDerived)
   x.yyy(1)
   x.yyy = 10
  End Sub




  “你看在sub test无论你按IHenry2中定义方式来使用x.yyy(1)还是用IHenry1中方式来使用x.yyy=10集成编译器都会在它们下方打上波浪线表示出错是什么错呢?”大李边问我边把鼠标靠近波浪线出现了编译器出错提示:

  “yyy”在继承接口“IHenry1”和“IHenry2”的间不明确

  “所以直强调命名规则对吧?”大李看了我“其实解决思路方法倒用不着去更改基接口中思路方法和属性名

  Sub test
   Dim x As IHenryDerived
   CType(x, IHenry1).yyy = 10
   CType(x, IHenry2).yyy(1)
  End Sub


  “哦用强制类型转换就可以了”我又学到不禁暗自窃喜但是我心里总是有个不大不小疙瘩说来说去这接口和抽象类可真太象了赶紧得问问:“大李哥这接口和……”

  “抽象类?”大李口就接了上来:“别急小伙子看看几点了该下楼吃午饭了



Tags:  vb.net接口继承

延伸阅读

最新评论

发表评论