I ran into a strange C# edge case and am looking for a good work-around.
There is a class that I do not control that looks like this:
namespace Other
Short answer: The CLR requires that all methods that implement an interface method must be virtual (Ecma 335 Partition II Section 12.1).
Long answer:
If the method in the base class is already virtual, then nothing extra is needed: the interface method can be bound to it.
If the method in the base class is not virtual, but in the same assembly, the sneaky compiler actually makes it virtual and final. Reflector confirms this. (“final” is the CLR terminology for “sealed” in C#.)
If the method in the base class is not virtual and in another assembly, then obviously the compiler can’t do this because it can’t modify the already-compiled assembly. Therefore, the only option here is to insert a redirect method that implements the interface method. Like all methods that implement an interface method, it too is marked virtual and final.
So the answer to your last question, “Is there a way to avoid this?”, is unfortunately no.