KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
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 OtherCompany { public class ClassIDoNotControl { public void SomeMethod(string argument) { Console.WriteLine((new StackFrame(1).GetMethod().Name)); } } } I'd like to inherit from this class in a class I do control. Additionally, I'd like to specify an interface on it: interface IInterfaceIDoControl { void SomeMethod(string argument); } class ClassIDoControl : OtherCompany.ClassIDoNotControl, IInterfaceIDoControl { } If all of these files are in the same assembly, everything works great: namespace MyCompany { class Program { static void Main(string[] args) { IInterfaceIDoControl i = new ClassIDoControl(); i.SomeMethod("Hello World!"); // Prints "Main" } } } But, if I move "ClassIDoNotControl" into another assembly, I don't get what I expected. Instead, I see "MyCompany.IInterfaceIDoControl.SomeMethod" for the output implying an extra stack frame. The reason is that under the covers, the C# compiler is changing "ClassIDoControl" to look like this: class ClassIDoControl : OtherCompany.ClassIDoNotControl, IInterfaceIDoControl { void IInterfaceIDoControl.SomeMethod(string argument) { base.SomeMethod(argument); } } Is there a way to avoid this compiler-generated extra layer of indirection with explicitly implemented interfaces?
Tags (comma-separated)
Save Edits
Cancel