1

理由はよくわかりませんが、内部アクセス修飾子が機能しないようです:S

このチュートリアルを見てきました: http://msdn.microsoft.com/en-us/library/7c5ka91b(v=vs.110).aspx

しかし、私にとっては、コンパイルされます。また、Illustrated C# 2012 という本を購入しました。そして、著者は内部クラスなどについて説明しています...しかし、それでも何もしません。

これは、内部アクセスでも機能する完全なコードです。

//Program.cs
namespace ConsoleApplication1
{
    class Program
    {
       static void Main(string[] args)
       {
           Class1 myclass = new Class1(); //works
           myclass.display(); //works
           myclass.display2(); //works even though its not public :S
           Console.Read();
       }
    }
}

-

//Class1.cs
namespace ConsoleApplication1
{
    internal class Class1
    {
       public void display()
       {
           Console.WriteLine("display()");
       }

       internal void display2()
       {
           Console.WriteLine("display2()");
       }
    }
}

関数 internal void display2() :S にアクセスすることもできます

4

4 に答える 4

7

internal「同じアセンブリ内の何からでもアクセス可能」を意味します。

クラス Class1 とクラス Program は同じアセンブリにあるため、クラス Program は display2() にアクセスできます。

誤って同じアセンブリに入れたと思います。Microsoft のサンプル コードを注意深く見ると、"Assembly1.cs" と "Assembly2.cs" と表示されていることがわかります。

Visual Studio を使用している場合、別のアセンブリでこれをテストする最も簡単な方法は、同じソリューションで新しいクラス ライブラリ プロジェクトを作成することです。これは、個別のアセンブリとしてカウントされます。メイン プロジェクトに新しいプロジェクトへの参照を追加する必要があります ([参照の追加] から [ソリューション] タブを使用)。

「アセンブリとは何ですか?」というスタック オーバーフローの質問があります。さらに情報が必要な場合。

于 2013-03-23T11:29:01.887 に答える
2

両方のクラスが同じアセンブリにある場合、internal期待どおりに機能します。

修飾子は、internal型とメンバーが同じアセンブリ内のファイルでのみ使用できるようにするために使用されます。

参照: http://msdn.microsoft.com/en-gb/library/7c5ka91b%28v=vs.80%29.aspx

于 2013-03-23T11:29:26.937 に答える
1

からMSDN;

内部型または内部メンバーは、同じアセンブリ内のファイル内でのみアクセスできます

同じアセンブリ内にあるのでProgramClass1問題はないはずです..

内部修飾子は正確には何をしますか? 「内部の直感的な意味は、『このプログラムに制限されたアクセス』です」と述べています。

つまり、外部プログラムは内部型にアクセスできません。

于 2013-03-23T11:30:51.863 に答える