【问题标题】:Why will my interface not implement a public method?为什么我的接口不会实现公共方法?
【发布时间】:2014-04-22 19:51:28
【问题描述】:

为什么我的界面不会导入到我的类中?我只想测试一些接口,并且需要将一种方法扩展到实现我的接口的类中。我认为这很简单,但它给了我一个错误,我将在底部列出。我的方法是公开的,它正在抛出我和错误。事实上,我把 public 关键字拿走了,它仍然给我一个错误。

是否有一个快捷键可以将所有方法导入到一个类中。

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace FlowControl
{
    public abstract class Grades : iBase, iFoot
    {
        public abstract void AddGrade(float grade);

        public abstract void ComputeStatistics();

        public void WriteGrades(string t)
        {
        }

        public int AddTwo(int a, int b)
        {
            return 0; 
        }

        void findYourScore() { }
    }

    public interface iBase 
    {
       public void findYourScore();
    }

    public interface iFoot 
    { 
    }
}

但我收到此错误:

修饰符“public”对此项无效

【问题讨论】:

    标签: c# oop


    【解决方案1】:

    您不能在接口方法、属性、事件或索引器上指定访问修饰符。接口本身被标记为公共的,因此它的所有成员也是隐式公共的。但是,您必须在实现该方法的位置指定访问修饰符(除非您正在编写显式接口成员实现)。

    例如:

    public abstract class Grades : iBase, iFoot
    {
        ...
        public void findYourScore() { }
    }
    
    public interface iBase 
    {
        void findYourScore();
    }
    

    进一步阅读

    【讨论】:

    • 是否有快捷键可以让我通过快捷方式导入方法。
    • @user3376708 在 Visual Studio 中,右键单击类定义中的接口名称(即Grades : 之后)并选择“实现接口”->“实现接口'iBase'”。这将创建“存根”实现,然后您必须自己填写。 Related
    • 在 Visual Studio 中:将光标放在类旁边的接口名称上,然后按 +。 (即'句号')并选择“实现接口'IBla'”
    【解决方案2】:

    接口内部不能指定访问修饰符,只需要指定方法的签名

    public interface iBase 
    {
        void findYourScore();
    }
    

    来自documentation

    接口可以包含方法、属性、事件、索引器或这四种成员类型的任意组合。接口不能包含常量、字段、运算符、实例构造函数、析构函数或类型。 接口成员是自动公开的,它们不能包含任何访问修饰符。成员也不能是静态的。

    【讨论】:

      【解决方案3】:

      就这么简单

      public interface iBase 
      {
         void findYourScore();
      }
      

      接口成员不需要访问限定符。正如编译器所说,public 在这种情况下无效。

      【讨论】:

        【解决方案4】:

        接口不指定保护级别或方法,也不实现它们。删除 public/private 部分,您的代码将正常工作。实现接口的类决定了访问级别。如果您需要指定访问级别,请使用abstract class 而不是接口。

        【讨论】:

          猜你喜欢
          • 2017-09-13
          • 2023-03-13
          • 1970-01-01
          • 2011-11-06
          • 1970-01-01
          • 2021-10-06
          • 1970-01-01
          • 1970-01-01
          • 2014-10-26
          相关资源
          最近更新 更多