错误1可访问性不一致:返回类型比方法更难访问

时间:2014-06-04 15:08:12

标签: c# winforms access-modifiers

当我正在构建时,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

4 个答案:

答案 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)。这样,通过使方法私有

,它仍然更容易访问