ビルド中に、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
クラスはpublic
ではありません。パブリックメソッドから非パブリック型を返すことはできません。
ネストされていないクラスのアクセシビリティを指定しない場合、デフォルトでinternal
が使用されます。 public
クラス定義にComposite
を追加します。
_public class Composite
{
...
_
あるいは、buildComposite
が必要をpublic
にしない場合(フォームで内部的にのみ使用されることを意味する)、メソッドprivate
を作成することもできます。
_private Composite buildComposite(ComboBox subs, ComboBox bas)
{
....
_
クラスComposite
のインスタンスをパブリックメソッドから返そうとしていますが、Composite
はパブリックではありません。したがって、呼び出し元のコードはComposite
クラスについて何も認識できないため、返されません。
Composite
クラスをパブリックにします。
public class Composite{...}
または、Composite
を返すメソッドに、クラスと同じ可視性を持たせる(おそらくプライベート):
private Composite buildComposite(ComboBox subs, ComboBox bas)
どちらが適切かは、現在のアセンブリの外部からメソッドを呼び出す(またはクラスを使用する)必要があるかどうかによって異なります。
デフォルトでは、クラスは通常、できる限り「非表示」なので、クラスに対してプライベートです。デフォルトの可視性について詳しく読む here
Composite
が_class Composite
_のような到達不能/変更不可能なコードで定義されている場合、buildComposite
を内部として作成してみてください。 internal Composite buildComposite(ComboBox subs, ComboBox bas)
と同様です。この方法では、メソッドprivateを作成することにより、さらにアクセスしやすくなります。
現在、カスタムタイプCompositeは、メソッドbuildCompositeよりもアクセスしにくいです。他のクラスがこのパブリックメソッドを表示するには、Compositeクラス/構造体へのパブリックアクセスも必要です。