c#问题中的接口

时间:2012-01-18 15:15:28

标签: c# interface

我是c#开发的新手。我只是想研究界面功能。根据我阅读的有关接口的文章和说明,我尝试编写一个示例代码,以根据我从这些说明和文章中理解的内容实现接口。

但是当我调试项目时,我遇到了构建错误

“可访问性不一致:参数类型'StartMachine'不如方法'SwitchBoard.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();
    }
}

3 个答案:

答案 0 :(得分:8)

您需要在界面前放置public访问修饰符。 Machine1 / 2类为public,但您的界面默认为internal。这比公众更容易接近。

将界面设置为公共访问修饰符:

public interface StartMachine {...}

<击> 或者,您可以将类更改为:

internal class Machine1: StartMachine {...}
internal class Machine2: StartMachine {...}

<击> 有关访问修饰符的更多信息,请查看MSDN

<强>校正:

Switchboard类和switchPress方法为public。但是,switchPress方法正在尝试访问StartMachine.startMachine(ugh,ambigious命名)方法,该方法为internal(默认情况下)。您需要将StartMachine界面更改为公开,或将Switchboard / switchPress更改为internal

答案 1 :(得分:2)

让您的界面公开。

public interface StartMachine 
{
    ...
}

答案 2 :(得分:1)

正如其他人所说,将界面标记为公开。我要补充一点,我认为这里的混淆是,虽然所有接口成员都是自动公开的,但接口本身并非必须如此。您可以将私有接口仅用于库的内部。