How .NET run-time determines which member to invoke in a interface involving hiearchy

20 篇文章 0 订阅

C# interface is very useful and powerful. The major difference in interface between C# and older languages such as java is C# introduced explicit member implementation, which can also cause considerable confusion and complexity. 

In this article I want to use simplest words to hopefully cover how an actual interface implementing method  is located for the invocation of a method on an instance of a class that implements some interfaces at arbitrary points in its inheritance hierarchy.

The rule for the programmer to know how it works is as simple as follows,

1. Find out what the instance actually is (the most derived class that it instantiates)

2. From this point go up until you hit a class that implements the queried interface or its descendants

3. Then class must implement the member in some way,

    - First if it is explicitly implemented, this member is going to be called

    - Or if it is implicitly implemented, then the member would be called, and if it's virtual/override method, it will be called as it is as such a method.

    - Otherwise, it has to be implemented by its base classes, then go up and find it in the nearest base class which has exactly the same signature. Still the explicitly implemented one takes the precedence, but search through the classes stops whenever a signature match is found.

The above is also of course how the compiler looks at the code.

There should be more, but can't remember. Add later.

   



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值