为何readonly struct中调用接口静态方法M时报编译错误?
编译错误原因及解决办法
先看你给出的代码:
public readonly struct MyStruct : IInterface { public MyStruct() { M(); } public void Test() { throw new NotImplementedException(); } } public interface IInterface { static void M() { Console.WriteLine("IA.M"); } void Test(); }
出现“当前上下文中不存在名称‘M’”错误的核心原因是:
- 接口的静态方法是接口自身的成员,不会被实现它的结构体或类继承,也不属于实现类型的实例成员。所以在
MyStruct的构造函数里直接写M()时,编译器找不到对应的方法。 - 你对“结构体可实现接口”“接口可包含静态方法”的认知是对的,但这两个特性的组合逻辑是:实现类只需要处理接口的实例成员(比如
Test()),静态方法和实现类的实例没有关联,不能直接通过实现类的上下文调用。
解决方法很简单,直接通过接口名称调用静态方法即可:
public MyStruct() { IInterface.M(); }
内容的提问来源于stack exchange,提问作者Maurice Marinus
相关产品推荐
相关产品推荐

