こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

C# アクセシビリティ 一貫性がありません

一貫性がありませんというエラーがでました。
ググったところコンストラクターをinternalにしたら治ると書いてあったので、そのとおりにしてみたら治りました。

しかし、理由が全くわかりません。
public privateくらいならわかるのですが、internalとはなんぞや???

http://dobon.net/vb/dotnet/beginner/accessibilitylevel.html
こちらのサイトをみたのですが、アセンブリに制限されるという意味がいまいちわかりません?

お願いします。

投稿日時 - 2015-02-11 14:19:28

QNo.8915408

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

A.dllとB.exeの2つ作りB.exeはA.dllを参照しているものとする

A.dllでinternal class Hogeを宣言した場合
A.dllでは自由にアクセスできるが
B.exeからは見えない

その為internalで宣言したクラスをpublicのメンバー変数で公開しようとした場合に、上記のエラーになります
public class Fuga
{
  public Hoge Hoge{get;set;}
}

※Hogeクラスはinternalで別アセンブリには隠したいと宣言しているのに、
publicで全アセンブリに公開しようとしている。
どっちかわかない・・という事です

メソッドをintenal Hoge Hoge{get;set;}にするか
Hogeクラスをpublic宣言するか、アクセス権をあわせないといけません

投稿日時 - 2015-02-11 16:45:58

お礼

だいぶわかりました。ありがとうございます。

投稿日時 - 2015-02-11 17:52:10

ANo.1

classがpubicならコンストラクタもpublic
classがinternalならコンストラクタもinternal

classを修飾子なしで宣言したらinternal


private < internal < public

internalはおなじアセンブリでまとめられた
プログラムからは呼び出せるけど
アセンブリを読み込んだプログラムからは呼び出せない

投稿日時 - 2015-02-11 15:06:14

お礼

private < internal < public
ですね。覚えておきます。

投稿日時 - 2015-02-11 17:52:28

あなたにオススメの質問