错误 1 可访问性不一致:返回类型比方法更难访问
Posted
技术标签:
【中文标题】错误 1 可访问性不一致:返回类型比方法更难访问【英文标题】:Error 1 Inconsistent accessibility: return type is less accessible than method 【发布时间】:2014-07-25 07:41:24 【问题描述】:当我构建时,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
【问题讨论】:
您的Composite
课程应该是公开的。去改变它
错误信息很容易解释。你不明白怎么回事?
您不能从本身不是公共的公共方法返回类型。
【参考方案1】:
您的Composite
课程不是public
。您不能从公共方法返回非公共类型。
如果您没有为非嵌套类指定可访问性,则默认使用 internal
。将public
添加到您的Composite
类定义中:
public class Composite
...
或者,如果buildComposite
不需要 为public
(意味着它仅在表单内部使用),那么您可以将方法private
或internal
设为好吧:
private Composite buildComposite(ComboBox subs, ComboBox bas)
....
【讨论】:
【参考方案2】:您正试图从公共方法返回 Composite
类的实例,但 Composite
不是公共的,因此无法返回,因为任何调用代码都无法知道 Composite
类的任何信息,因为它看不到它。
公开您的 Composite
课程。
public class Composite...
或者使返回Composite
的方法与您的类具有相同的可见性(可能是私有的):
private Composite buildComposite(ComboBox subs, ComboBox bas)
哪些是合适的取决于您是否需要从当前程序集外部调用方法(或使用类)。
默认情况下,类通常尽可能“隐藏”,因此对于类来说是私有的。阅读更多关于默认可见性here
【讨论】:
【参考方案3】:您的自定义类型 Composite 目前比您的方法 buildComposite 更难访问。要让其他类看到这个公共方法,它们还必须对复合类/结构具有公共访问权限。
【讨论】:
【参考方案4】:如果Composite
是在class Composite
等不可访问/不可修改的代码中定义的,您可以尝试将buildComposite
设为内部代码。喜欢
internal Composite buildComposite(ComboBox subs, ComboBox bas)
。这样,通过将方法设置为 private,它仍然更易于访问。
【讨论】:
以上是关于错误 1 可访问性不一致:返回类型比方法更难访问的主要内容,如果未能解决你的问题,请参考以下文章
可访问性不一致:字段类型“世界”比字段“frmSplashScreen”更难访问