代码之家  ›  专栏  ›  技术社区  ›  JunYoung Yoon

在接口中声明抽象函数和以非抽象形式声明函数有什么区别?

  •  1
  • JunYoung Yoon  · 技术社区  · 2 年前

    我在学习C时有一个问题。

    public interface IRequireInitialization
    {
        void Init();
    }
    public class TESTManager : IRequireInitialization
    {
        public void Init(){ throw new NotImplementedException(); }
    }
    

    但是我的朋友说我应该在接口成员函数的声明之前添加抽象。 我觉得在实现界面方面没有什么大的区别,有什么区别?如果有差异,我应该什么时候使用?

    public interface IRequireInitialization
    {
        abstract void Init();
    }
    public class TESTManager : IRequireInitialization
    {
        public void Init(){ throw new NotImplementedException(); }
    }
    
    1 回复  |  直到 2 年前
        1
  •  3
  •   bolov    2 年前

    C#8 introduced 默认接口方法。这允许为接口本身中的方法定义默认实现(主体)。

    作为该提案的一部分,他们放宽了语法,允许对接口方法使用修饰符:

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

    abstract “修改”只是明确了这一点:

    类似地,虽然抽象是没有实体的接口成员的默认值,但可以显式地给出该修饰符。