我遇到了一个奇怪的C边缘案件,正在寻找一个良好的工作。
有一个类是我无法控制的,它如下所示:
namespace OtherCompany
{
public class ClassIDoNotControl
{
public void SomeMethod(string argument)
{
Console.WriteLine((new StackFrame(1).GetMethod().Name));
}
}
}
我想从这个阶级继承一个阶级
做
控制。另外,我想在上面指定一个接口:
interface IInterfaceIDoControl
{
void SomeMethod(string argument);
}
class ClassIDoControl : OtherCompany.ClassIDoNotControl, IInterfaceIDoControl
{
}
如果所有这些文件都在同一程序集中,那么一切都会很好地工作:
namespace MyCompany
{
class Program
{
static void Main(string[] args)
{
IInterfaceIDoControl i = new ClassIDoControl();
i.SomeMethod("Hello World!"); // Prints "Main"
}
}
}
但是,如果我将“ClassidNotControl”移动到另一个程序集中,我就无法得到我所期望的。相反,我看到输出的“mycompany.iInterfaceIdocontrol.someMethod”,它意味着一个额外的堆栈帧。
原因是,在封面下,C编译器将“classidocontrol”更改为如下所示:
class ClassIDoControl : OtherCompany.ClassIDoNotControl, IInterfaceIDoControl
{
void IInterfaceIDoControl.SomeMethod(string argument)
{
base.SomeMethod(argument);
}
}
有没有一种方法可以避免这个编译器生成带有显式实现接口的额外间接层?