c#问题中的接口

本文关键字:接口 问题 | 更新日期: 2023-09-27 18:20:35

我是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();
    }
}

c#问题中的接口

您需要在接口前面放置一个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

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

public interface StartMachine

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

将您的接口公开。

public interface StartMachine 
{
    ...
}

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