当前位置:  开发笔记 > 编程语言 > 正文

编译器看不到接口的默认实现吗?

如何解决《编译器看不到接口的默认实现吗?》经验,为你挑选了1个好方法。

这是我的AC#项目中的代码,该代码针对Visual Studio 2019(16.3.9)的.NET Core 3.0(因此我应该在C#8.0中)

public interface IJsonAble
{
    public string ToJson() => System.Text.Json.JsonSerializer.Serialize(this);
}

public class SumRequest : IJsonAble
{
    public int X { get; set; }

    public int Y { get; set; }

    public void Tmp()
    {
        new SumRequest().ToJson(); //compile error
    }
}

编译错误是:

CS1061'SumRequest'不包含'ToJson'的定义,并且找不到可以接受的扩展方法'ToJson'接受类型为'SumRequest'的第一个参数(您是否缺少using指令或程序集引用?)

有人可以阐明这种行为吗?



1> DavidG..:

方法仅在接口上可用,而在上不可用。因此,您可以这样做:

IJsonAble request = new SumRequest()
var result = request.ToJson();

要么:

((IJsonAble)new SumRequest()).ToJson();

这样做的原因是它允许您添加到界面中,而不必担心下游后果。例如,该ToJson方法可能已经存在于SumRequest类中,您希望将其调用吗?

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有