内部类访问修饰符不起作用?

Ass*_*ast 1 c# class internal

我真的不明白为什么,但似乎内部访问修饰符不起作用:S

我看过这个教程:http: //msdn.microsoft.com/en-us/library/7c5ka91b(v=vs.110).aspx

但对我来说,它编译.另外,我买了一本图书画报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();
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

-

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

       internal void display2()
       {
           Console.WriteLine("display2()");
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

我甚至可以访问函数internal void display2():S

Mat*_*son 7

internal 意思是"在同一个集会中任何东西都可以进入".

因为您的类Class1和类Program在同一个程序集中,所以类Program可以访问display2().

我想你不小心将它们放在同一个组件中; 如果仔细查看Microsoft的示例代码,您会看到它显示"Assembly1.cs"和"Assembly2.cs"

如果您使用的是Visual Studio,则使用不同程序集测试此方法的最简单方法是在同一解决方案中创建新的类库项目.那将被视为一个单独的集会.您必须向主项目添加对新项目的引用(通过"添加引用",然后是"解决方案"选项卡).

关于"什么是组件?"的Stack Overflow问题.如果您需要更多信息.