错误 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(意味着它仅在表单内部使用),那么您可以将方法privateinternal 设为好吧:

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”更难访问

c#错误不一致的可访问性:参数类型'HRDMSV1.User'比方法更难访问

C#不一致的可访问性:返回类型比方法更难访问

c#访问性不一致的问题

可访问性不一致:属性类型错误

如何避免类和方法的可访问性不一致导致的编译错误?