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

本文关键字:访问 方法 返回类型 错误 不一致 | 更新日期: 2023-09-27 18:06:47

当我正在构建时,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。复合'是比方法'Project_HGHTM9.Form1.buildComposite(System.Windows.Forms. forms .)更难访问。ComboBox, System.Windows.Forms.ComboBox)' c:'users'nguyen'documents'visual studio 2013'Projects'Project_HGHTM9'Project_HGHTM9'Form1.cs 172 26 Project_HGHTM9

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

您的Composite类不是public类。不能从公共方法返回非公共类型。

如果您没有为非嵌套类指定可访问性,则默认使用internal。将public添加到Composite类定义中:

public class Composite
{
    ...
或者,如果buildComposite需要public(意味着它只在表单内部使用),那么您也可以将方法设置为privateinternal:
private Composite buildComposite(ComboBox subs, ComboBox bas)
{
    ....

您试图从公共方法返回类Composite的实例,但Composite不是公共的,因此无法返回,因为任何调用代码都无法了解Composite类,因为它无法看到它。

Composite类设置为public

public class Composite{...}

或使返回Composite的方法与类(可能是私有的)具有相同的可见性:

private Composite buildComposite(ComboBox subs, ComboBox bas)

哪一种方法是合适的将取决于您是否需要从当前程序集外部调用方法(或使用类)。

默认情况下,类通常是尽可能"隐藏"的,所以对类来说是私有的。在这里阅读更多关于默认可见性的信息

您的自定义类型Composite,目前比您的buildComposite方法更难访问。要让其他类看到这个公共方法,它们还必须具有对Composite类/结构的公共访问权限。

如果Composite是在不可访问/不可修改的代码中定义的,如class Composite,您可以尝试将buildComposite作为内部的。就像internal Composite buildComposite(ComboBox subs, ComboBox bas)。这样,通过将方法设为私有,它仍然更容易访问。