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

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.

   



posted @ 2012-09-14 03:31  quanben  阅读(138)  评论(0编辑  收藏  举报