c#问题中的接口

c#问题中的接口,c#,interface,C#,Interface,我是c#development的新手。我只是想研究一下界面特性。根据我读到的关于接口的文章和注释,我试图根据从这些注释和文章中了解的内容编写一个示例代码来实现接口 但是当我调试这个项目时,我得到了一个构建错误 “可访问性不一致:参数类型“StartMachine”的可访问性不如方法“Switch.switchPress(StartMachine)”的可访问性。” 这里有什么问题?。或者我是否以正确的方式实现了接口?还是我对界面的概念错了 请帮忙。 提前谢谢 我把代码贴在下面 using Syst

我是c#development的新手。我只是想研究一下界面特性。根据我读到的关于接口的文章和注释,我试图根据从这些注释和文章中了解的内容编写一个示例代码来实现接口

但是当我调试这个项目时,我得到了一个构建错误

“可访问性不一致:参数类型“StartMachine”的可访问性不如方法“Switch.switchPress(StartMachine)”的可访问性。”

这里有什么问题?。或者我是否以正确的方式实现了接口?还是我对界面的概念错了

请帮忙。 提前谢谢

我把代码贴在下面

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        StartMachine s1 = new Machine1();
        SwitchBoard switch1 = new SwitchBoard();
        switch1.switchPress(s1);
    }
}

interface StartMachine
{
    void startMachine();
}

public class Machine1 : StartMachine
{
    public void startMachine()
    {
        HttpContext.Current.Response.Write("Machine 1 Started");
    }
}

public class Machine2 : StartMachine
{
    public void startMachine()
    {
        HttpContext.Current.Response.Write("Machine 2 Started");
    }
}

public class SwitchBoard
{
    public void switchPress(StartMachine switchNum)
    {
        switchNum.startMachine();
    }
}

考虑错误消息,您的方法和接口之间存在“不一致的可访问性”。修复很简单,请将您的接口标记为公共

public interface StartMachine

您有一个接受
StartMachine
的公共方法,但接口本身没有标记为公共。外部代码将能够看到该方法,但无法为其提供适当的参数。

您需要在界面前面放置一个
public
访问修饰符。Machine1/2类是
公共
,但您的界面默认为
内部
。这比公众更难接近

将接口设置为公共访问修改器:

或者,您可以将您的类更改为:

internal class Machine1: StartMachine {...}
internal class Machine2: StartMachine {...}
有关访问修饰符的更多信息,请参阅

更正:


switch
类和
switchPress
方法是
public
。但是,
switchPress
方法正在尝试访问
StartMachine.StartMachine
(呃,模糊命名)方法,该方法是
内部
(默认情况下)。您需要将
StartMachine
界面更改为公共界面,或者将
switcheck
/
开关按键更改为
内部

将界面设置为公共界面

public interface StartMachine 
{
    ...
}

正如其他人所说,将接口标记为public。我要补充一点,我认为这里的混乱之处在于,虽然所有接口成员都自动公开,但接口本身不必公开。您可以拥有仅在库内部使用的专用接口。

接口惯例是在它们前面加上大写字母“I”。。。我真的建议你遵循这个惯例,它会让你的代码更容易阅读<代码>IStartMachine
谢谢jeremy。我将来会遵循代码约定。
public interface StartMachine 
{
    ...
}