接口成员不能具有定义

时间:2018-12-12 15:29:04

标签: c# c#-8.0

为什么我无法添加此接口的默认实现?

我有C#8 / .NET Core 3.0(如Main中所示)

但是由于某种原因它大喊:

  

'ITest.Test()':接口成员不能具有定义

interface ITest
{
    // Interface members cannot have a definition
    void Test()
    {
        Console.WriteLine("Interface");
    }
}

public class Test : ITest
{
    void ITest.Test()
    {
        throw new NotImplementedException();
    }
}
class Program
{
    static void Main(string[] args)
    {
        // this works properly
        var arr = "test".ToCharArray();

        Console.WriteLine(arr[1..2]);
        Console.WriteLine(arr[..2]);
        Console.WriteLine(arr[..^1]);
        Console.WriteLine(arr[^1..]);
    }
}

2 个答案:

答案 0 :(得分:4)

默认的界面方法功能为not available yet, even in the C# 8.0 preview(由Microsoft代表响应“ Rand.Random”评论者的询问,询问该功能是否未在预览中得到确认)。

如果要提供实现,我建议使用继承和虚拟方法。

public class TestBase
{
    public virtual void TestMethod()
    {
        Console.WriteLine("TestBase");
    }
}

public class Test : TestBase
{
    public override void TestMethod()
    {
        throw new NotImplementedException();
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        var testBase = new TestBase();
        testBase.TestMethod(); // Prints "TestBase"

        var test = new Test();
        test.TestMethod(); // Throws NotImplementedException
    }   
}

答案 1 :(得分:4)

因为此功能尚不可用。根据{{​​3}},此功能处于原型阶段。 dymanoid's link中没有提到C#8.0 beta版。