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