C# Extension method precedence

扶醉桌前 提交于 2019-12-01 02:54:00

The big difference here is that you have defined an extension method for the IFoo interface, and your foo variable is of type IFoo.

If your code was to look like this:

Foo foo = new Foo();
foo.Say()

The Foo.Say() method would be executed, not the extension method.

I wish I could give you a thorough explanation on why this is but I can only cover the basic mechanism. As your variable was of IFoo type and not of Foo, when the compiler tried to determine what methods were available, it looked past any non-interface methods of the Foo class (as it should). However, the extension method Say() was available, so it invoked this.

In your Main, foo is declared as IFoo. When the compiler looks for a method Say, it finds only the extension method. This is because the instance method is declared in Foo, not in IFoo. The compiler doesn't know that the variable foo happens to contain a instance of Foo; it just looks at the type the variable is declared of.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!