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

来源:互联网 发布:mysql explain括号 编辑:程序博客网 时间:2024/06/06 08:24

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.

   



原创粉丝点击