You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 07:55:39