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,使用不同程序集进行测试的最简单方法是在同一解决方案中创建一个新的类库项目。这将被视为一个单独的程序集。您必须向主项目添加对新项目的引用(通过添加引用,然后是解决方案选项卡)。

一个关于“什么是程序集?”的 Stack Overflow 问题。如果您需要更多信息。

于 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 回答
-1

internal访问修饰符意味着可以从同一程序集中的任何位置访问该成员。在您的情况下,“Program”和“Class1”类在同一个程序集中,因此,Program 可以访问 display2(它也在internal同一个程序集中)。

如果您不希望从 Program 类访问 display2,您可以简单地创建它private,因此只能从 Class1 访问它。

于 2017-01-23T21:12:47.797 回答