web-dev-qa-db-ja.com

エラー1一貫性のないアクセシビリティ:戻り値の型はメソッドよりもアクセスしにくい

ビルド中に、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

12
user3453838

Compositeクラスはpublicではありません。パブリックメソッドから非パブリック型を返すことはできません。

ネストされていないクラスのアクセシビリティを指定しない場合、デフォルトでinternalが使用されます。 publicクラス定義にCompositeを追加します。

_public class Composite
{
    ...
_

あるいは、buildComposite必要publicにしない場合(フォームで内部的にのみ使用されることを意味する)、メソッドprivateを作成することもできます。

_private Composite buildComposite(ComboBox subs, ComboBox bas)
{
    ....
_
43
D Stanley

クラスCompositeのインスタンスをパブリックメソッドから返そうとしていますが、Compositeはパブリックではありません。したがって、呼び出し元のコードはCompositeクラスについて何も認識できないため、返されません。

Compositeクラスをパブリックにします。

public class Composite{...}

または、Compositeを返すメソッドに、クラスと同じ可視性を持たせる(おそらくプライベート):

private Composite buildComposite(ComboBox subs, ComboBox bas)

どちらが適切かは、現在のアセンブリの外部からメソッドを呼び出す(またはクラスを使用する)必要があるかどうかによって異なります。

デフォルトでは、クラスは通常、できる限り「非表示」なので、クラスに対してプライベートです。デフォルトの可視性について詳しく読む here

2
Sam Holder

Compositeが_class Composite_のような到達不能/変更不可能なコードで定義されている場合、buildCompositeを内部として作成してみてください。 internal Composite buildComposite(ComboBox subs, ComboBox bas)と同様です。この方法では、メソッドprivateを作成することにより、さらにアクセスしやすくなります。

0
KSK

現在、カスタムタイプCompositeは、メソッドbuildCompositeよりもアクセスしにくいです。他のクラスがこのパブリックメソッドを表示するには、Compositeクラス/構造体へのパブリックアクセスも必要です。

0
GEEF