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

泛型接口方法在实现类中不可见,调用时报CS1061错误

解决CS1061错误:MyClass不存在Convert方法的问题

出现这个错误的核心原因有两个:

  • MyClass里实现的Convert<L>方法未添加public修饰符,C#类成员默认是私有访问级别,外部无法调用。而接口定义的方法默认是公开的,实现时必须显式声明public才能让外部访问。
  • 代码误用了Java的Integer类型,C#中对应的数值类型是int,这属于基础语法错误。

下面提供两种可行的修正方案:

方案一:隐式实现接口并公开方法

直接给Convert方法加上public修饰符,同时修正类型错误:

public interface MyInterface<T>
{
    List<T> Convert<L>(List<L> inputs);
}

public class MyClass : MyInterface<string>
{
    // 添加public修饰符,让外部可以访问该方法
    public List<string> Convert<L>(List<L> inputs)
    {
        // 示例转换逻辑:将输入元素转为字符串
        return inputs.Select(item => item.ToString()).ToList();
    }
}

public class Program
{
    static public void Main(String[] args)
    {
        MyClass myClass = new MyClass();
        // 把Integer替换为C#的int类型
        myClass.Convert((new int[] { 1, 2, 3 }).ToList());
    }
}

方案二:显式实现接口

如果不想让Convert方法成为MyClass的公共成员,仅允许通过接口引用调用,可以使用显式接口实现:

public interface MyInterface<T>
{
    List<T> Convert<L>(List<L> inputs);
}

public class MyClass : MyInterface<string>
{
    // 显式实现接口,无需加public,仅能通过MyInterface<string>类型的引用调用
    List<string> MyInterface<string>.Convert<L>(List<L> inputs)
    {
        return inputs.Select(item => item.ToString()).ToList();
    }
}

public class Program
{
    static public void Main(String[] args)
    {
        // 将实例声明为接口类型
        MyInterface<string> myClass = new MyClass();
        myClass.Convert((new int[] { 1, 2, 3 }).ToList());
    }
}

内容的提问来源于stack exchange,提问作者Andy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:25:15