我有一个 Computer.cs 类,它属于计算机形式,我有一个独立的类指标。
在我的代码中我收到错误:
Incompatibility accessibility: accessibility return type "WF.Code.Indicators"
method is below than accessibility return type "WF.Computer.ShowForm ()"
这是什么意思?
Computer.cs
namespace WF
{
public partial class Computer : Form
{
Code.Indicators indicators = new Code.Indicators();
public Computer()
{
if (indicators.isComputerAlreadyRunning == false)
{
InitializeComponent();
indicators.isComputerAlreadyRunning = true;
}
}
public Code.Indicators ShowForm() // Error
{
return new Code.Indicators(indicators.isComputerAlreadyRunning);
}
}
}
Indicators.cs
namespace WF.Code
{
class Indicators
{
public Indicators(bool isComputerAlreadyRunning)
{
this.isComputerAlreadyRunning = isComputerAlreadyRunning;
}
public bool isComputerAlreadyRunning = false;
}
}
答案 0 :(得分:2)
这意味着,由于ShowForm
为public
,因此返回类型也必须为public
。
答案 1 :(得分:2)
你的方法:
public Code.Indicators ShowForm() // Error
{
return new Code.Indicators(indicators.isComputerAlreadyRunning);
}
它返回Indicators
个对象,且public
可见度。但是Indicators
类型本身不是public
,而是internal
(默认情况下,因为您没有指定它;有关详情,请参阅this answer)。< / p>
将类Indicators
声明为public
以解决问题,或将方法ShowForm
设置为internal
。
编辑:
为了更好地解释编译器抱怨的原因,想象您的代码实际上是编译到库中的。有人从另一个程序集中包含这个库来使用它,这个人会调用这个public
方法ShowForm
(因为他可以!)。
他将获得一个指向Indicators
的参考,但从他的观点来看(实际上是从他的集会的角度来看),他不知道班级Indicators
是什么是,因为它的可见性是internal
(正如我所说,默认情况下)。与internal
元素相反,public
元素不会暴露给其他程序集。这会产生一种不连贯性,这就是编译器抱怨的原因。
答案 2 :(得分:1)
你指标类现在是:
namespace WF.Code
{
class Indicators
{
public Indicators(bool isComputerAlreadyRunning)
{
this.isComputerAlreadyRunning = isComputerAlreadyRunning;
}
public bool isComputerAlreadyRunning = false;
}
}
但应该是:
namespace WF.Code
{
public class Indicators
{
public Indicators(bool isComputerAlreadyRunning)
{
this.isComputerAlreadyRunning = isComputerAlreadyRunning;
}
public bool isComputerAlreadyRunning = false;
}
}
在.NET中,如果你在类'区域外实例化一个类,那么要么是内部代码访问还是公共代码访问..否则就像你创建类一样私有(如果没有代码访问实现作为你的Indicators实现 - 类指标 - 编译器接受它为私有,你不能访问该类)
即使是内部代码访问并且您将其作为公开引用,您也会得到相同的异常。
当你的班级代码访问是公开的时候应该是所有实例/内部方法或调用应该是公共的,如果它是内部的那么可以是内部的,私有的或受保护的