Take this example:
public interface IFoo
{
IFoo Bar();
}
public class Foo : IFoo
{
public Foo Bar()
{
//...
}
IFoo IFoo.Bar() { return Bar(); } //Why is this necessary?
}
Why is the implicit implementation of IFoo Bar() necessary even though Foo converts to IFoo without a cast?
You can solve it like this (a bit ugly, but takes care of the strong typing):