我所能想到的唯一办法如下,但这远非理想:
interface IBar {
void Foo() => Console.WriteLine("Hello from interface!");
}
struct Baz : IBar {
// compiler error
void Test1() => this.Foo();
// IIRC this will box
void Test2() => ((IBar)this).Foo();
// this shouldn't box but is pretty complicated just to call a method
void Test3() {
impl(ref this);
void impl<T>(ref T self) where T : IBar
=> self.Foo();
}
}
有没有更简单的方法来做这件事?
(相关问题和我提出此问题的原因:从实现类调用C#接口默认方法)
struct
。你是正确的。尽管如此,类型转换是必需的。 - GSergbazInstance.Foo()
就应该无需盒子调用该方法。 - Joel Coehoorn