- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【C#】クラスのコンストラクタ引数参照渡しでエラー)
【C#】クラスのコンストラクタ引数参照渡しでエラー
このQ&Aのポイント
- C#の.NETでWindowsアプリを作成しております。AクラスからBクラスに、Cクラスを参照渡しで渡し、BクラスにてCクラスのメンバ変数の値を書き換えた後、Aクラスでその値を使用するといったプログラムを作成しようと思っています。
- Bクラスを生成する際に、コンストラクタの引数渡しにて、Cクラスを渡す書き方をしたのですが、エラー CS0051: アクセシビリティに一貫性がありません。パラメータの型 'ref Test.C' のアクセシビリティはメソッド 'Test.B.B(ref Test.C)' よりも低く設定されています。が発生してしまい、解決法が分かりません。
- 解決策をご存知の方おられましたら、ご教示お願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
アクセス修飾子というのは,publicやinternalを指します。 Cは省略されているため,internalになっています。 よって, public B(ref C c) を, internal B(ref C c) とするのが, > メソッドのアクセス修飾子を引数の型のアクセス修飾子にあわせる の方法になります。
その他の回答 (1)
- Yune-Kichi
- ベストアンサー率74% (465/626)
回答No.1
エラーの通りなのですが……。 publicなクラスに含まれるpublicなメソッドの引数の型として,internalなクラスを指定していますが, メソッドのアクセス修飾子よりも引数の型のアクセス修飾子の方が厳しいものになっています。 結果として,このメソッドを利用可能になるのは,引数の型のアクセス修飾子の範囲になってしまっています。 解決するには, ・メソッドのアクセス修飾子を引数の型のアクセス修飾子にあわせる ・引数の型のアクセス修飾子をメソッドのアクセス修飾子の範囲まで引き上げる のどちらかの対策が必要です。 # お勧めは前者。後者はそもそも引数の型のアクセス修飾子を間違えている場合のみに使う。
質問者
補足
御回答ありがとうございます。 エラーの原因は大体理解できたのですが、 解決法をコードにすることが出来なく悩んでいます。 >・メソッドのアクセス修飾子を引数の型のアクセス修飾子にあわせる というのは、具体的にはどうコードを修正すれば良いのでしょうか?
お礼
ご丁寧なご解説ありがとうございます。 サンプルコードを下記のように修正し解決することが出来ました。 ありがとうございました。 【Aクラス】 C c = new C() B b = new B( ref c ); 【Bクラス】 namespace Test { public partial class B : Form { internal B(ref C c) // コンストラクタ { InitializeComponent(); } } }