文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C#中怎么访问接口成员

2023-06-17 23:06

关注

C#中怎么访问接口成员,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

C#对接口成员访问

C#对接口方法的调用和采用索引指示器访问的规则与类中的情况也是相同的。如果底层成员的命名与继承而来的高层成员一致,那么底层成员将覆盖同名的高层成员。但由于接口支持多继承,在多继承中,如果两个父接口含有同名的成员,这就产生了二义性(这也正是C#中取消了类的多继承机制的原因之一),这时需要进行显式的定义:

using System ;  interface ISequence {  int Count { get; set; }  }  interface IRing {  void Count(int i) ;  }  interface IRingSequence: ISequence, IRing { }  class CTest {  void Test(IRingSequence rs) {  //rs.Count(1) ; 错误, Count 有二义性  //rs.Count = 1; 错误, Count 有二义性  ((ISequence)rs).Count = 1; // 正确  ((IRing)rs).Count(1) ; // 正确调用IRing.Count  }  }

上面的例子中,前两条语句rs .Count(1)和rs .Count = 1会产生二义性,从而导致编译时错误,因此必须显式地给rs 指派父接口类型,这种指派在运行时不会带来额外的开销。

再看下面的例子:

using System ;  interface IInteger {  void Add(int i) ;  }  interface IDouble {  void Add(double d) ;  }  interface INumber: IInteger, IDouble {}  class CMyTest {  void Test(INumber Num) {   // Num.Add(1) ; 错误  Num.Add(1.0) ; // 正确  ((IInteger)n).Add(1) ; // 正确  ((IDouble)n).Add(1) ; // 正确  }  }

调用Num.Add(1) 会导致二义性,因为候选的重载方法的参数类型均适用。但是,调用Num.Add(1.0) 是允许的,因为1.0 是浮点数参数类型与方法IInteger.Add()的参数类型不一致,这时只有IDouble.Add 才是适用的。不过只要加入了显式的指派,就决不会产生二义性。

接口的多重继承的问题也会带来C#对接口成员访问上的问题。例如:

interface IBase {  void FWay(int i) ;  }  interface ILeft: IBase {  new void FWay (int i) ;  }  interface IRight: IBase  { void G( ) ; }  interface IDerived: ILeft, IRight { }  class CTest {  void Test(IDerived d) {  d. FWay (1) ; // 调用ILeft. FWay  ((IBase)d). FWay (1) ; // 调用IBase. FWay  ((ILeft)d). FWay (1) ; // 调用ILeft. FWay  ((IRight)d). FWay (1) ; // 调用IBase. FWay  }  }

上例中,方法IBase.FWay在派生的接口ILeft中被Ileft的成员方法FWay覆盖了。所以对d. FWay (1)的调用实际上调用了。虽然从IBase-> IRight-> IDerived这条继承路径上来看,ILeft.FWay方法是没有被覆盖的。我们只要记住这一点:一旦成员被覆盖以后,所有对其的访问都被覆盖以后的成员"拦截"了。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网行业资讯频道,感谢您对编程网的支持。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯