首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# 8预览中的抽象接口方法

C# 8预览中的抽象接口方法
EN

Stack Overflow用户
提问于 2019-04-29 23:16:48
回答 2查看 2.2K关注 0票数 0

我试着:

代码语言:javascript
复制
public interface I { abstract void F(); }

我得到:

修饰符“抽象”对C# 7.3中的此项无效。请使用语言版本“预览”或更高版本。

然而,我发现https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8中没有提到这个特性(

我在哪里能找到那个的文档?还是这里的信息不对?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-29 23:29:09

C# 8.0将允许接口成员的修饰符和默认实现。您可以看到这里和details 这里

但是,接口方法中的abstract修饰符没有任何意义,但它可能在C# 8中可用,因为其他修饰符也是有效的。

您可以看到abstract允许修饰符中列出

接口的语法可以放宽,以允许其成员上的修饰符。允许进行以下操作:私有的、受保护的、内部的、公共的、虚拟的、抽象的、密封的、静态的、外部的和部分的。

票数 3
EN

Stack Overflow用户

发布于 2022-07-04 23:26:38

与另一个答案一样,c#8.0的回答也是合法的。但是在接口中有抽象方法有什么好处吗?

随着语言最近的改进,接口中的abstract函数可以被看作是没有默认实现的东西。

现在,C#接口可以为接口函数提供默认实现。看下面的例子。它是完全好的,输出是“默认实现的示例函数”。

代码语言:javascript
复制
//AN INTERFACE WITH DEFUALT METHOD
interface I
{
  string Example()
  {
      return "Default implemented example function";
  }
}

//CLASS IMPLEMENTING THE INTERFACE
class C : I
{

}

//AN EXAMPLE CLASS ACCESSING THE DEFAULT IMPLEMENTED example FUNCTION.
public class Test
{
    public static void Main(string[] args)
    {
        I i = new C();
        Console.WriteLine (i.Example());
    }
}

在上面的例子中,让我们假设尝试为接口中的“abstract ()”函数添加abstract

代码将不会编译"'I.Example()‘不能声明一个主体,因为它被标记为抽象“

因此,当我们使用abstract时,很明显的方法是在类中定义函数(实现接口),用于任何用法(如下所示)。

代码语言:javascript
复制
//AN INTERFACE WITH ABSTRACT METHOD
interface I
{
  abstract string Example();
}

//CLASS IMPLEMENTING THE INTERFACE AND GIVE A BODY FOR EXAMPLE FUNCTION
class C : I
{
    public string Example()
    {
        return "Implemented example function";
    }

}

//A CLASS ACCESSING THE CLASS METHOD EXAMPLE.
public class Test
{
    public static void Main(string[] args)
    {
        I i = new C();
        Console.WriteLine (i.Example());
    }
}

总之,将接口中的函数声明为abstract,接口中的函数不可能有默认的主体,相反,实现接口的类必须有接口的主体。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55911955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档