当我正在构建时,VS显示错误。这是我的代码:
public Composite buildComposite(ComboBox subs, ComboBox bas)
{
int count = 0;
Composite a = new Composite();
if (subs.SelectedItem != null)
{
foreach (Substance d in listSubstance)
{
if (String.Compare(d.notation, subs.Text) == 0)
{
count++;
a.subs = new Substance(d);
break;
}
}
}
if (bas.SelectedItem != null)
{
foreach (Base g in listBase)
{
if (String.Compare(g.notation, bas.Text) == 0)
{
count++;
a.bas = new Base(g);
break;
}
}
}
if (count > 0)
{
a.equilibrium();
a.settypesubs(arrayDefinition);
return a;
}
else
return null;
}
这是我的错误:
错误1可访问性不一致:返回类型“Project_HGHTM9.Composite”比方法“Project_HGHTM9.Form1.buildComposite(System.Windows.Forms.ComboBox,System.Windows.Forms.ComboBox)”c:\ users \ nguyen更难访问\ documents \ visual studio 2013 \ Projects \ Project_HGHTM9 \ Project_HGHTM9 \ Form1.cs 172 26 Project_HGHTM9
答案 0 :(得分:39)
您的Composite
课程不是public
。您无法从公共方法返回非公共类型。
如果没有为非嵌套类指定辅助功能,则默认使用internal
。将public
添加到您的Composite
类定义中:
public class Composite
{
...
或者,如果buildComposite
不需要为public
(意味着它仅在表单内部使用),那么您可以创建方法{{1} }以及:
private
答案 1 :(得分:2)
您正尝试从公共方法返回类Composite
的实例,但Composite
不公开,因此无法返回,因为任何调用代码都无法了解{{1} 1}}类,因为它无法看到它。
让您的Composite
课程公开。
Composite
或让您的方法返回public class Composite{...}
与您的类具有相同的可见性(可能是私有的):
Composite
其中哪一项是合适的,取决于您是否需要从当前程序集之外调用方法(或使用类)。
默认情况下,课程通常为“隐藏”。因为它可以,所以私人课程。详细了解默认可见性here
答案 2 :(得分:0)
您的自定义类型Composite目前比方法buildComposite更难访问。对于其他类来查看此公共方法,它们还必须具有对Composite类/ struct的公共访问权。
答案 3 :(得分:0)
如果在Composite
等无法访问/不可修改的代码中定义了class Composite
,您可以尝试将buildComposite
作为内部代码。喜欢
internal Composite buildComposite(ComboBox subs, ComboBox bas)
。这样,通过使方法私有。