在内部访问修饰符的上下文中,C#中的程序集是什么?

时间:2014-11-11 14:28:07

标签: c# .net-assembly protected access-modifiers .net-internals

我认为汇编是Visual Studio中解决方案的一个项目,但后来我试图理解继承和内部/受保护的访问修饰符,我迷路了。
* Project1Project2在一个解决方案中是独立的VS项目:

namespace Project1
{
    public class C1
    {
        internal int field1;
        internal protected int field2;
    }
}


namespace Project2
{
    public class C2
    {
        public static void f(C1 c1)
        {
            c1.field1 = 1;  //no problems here
            c1.field2 = 2;  //neither here
        }
    }
}


Project2我没有继承权,因此字段field1field2都应该无法访问,但根本没有错误。 (我将Project1添加到Project2参考中,并在using Project1

中添加Project2

2 个答案:

答案 0 :(得分:1)

您的解决方案有效,因为它包含Visual Studio可以忽略的错误。

您有一个功能齐全的项目Project1,其中包含Main()。这是设置为启动项目的项目,可以运行,因为它不包含任何错误。

并非您的解决方案中的所有项目都必须成功构建才能运行一个项目;只是您要运行的项目所依赖的项目。在这种情况下没有。

右键单击Project2,单击"设置为StartUp Project"并尝试构建或运行它:您将看到您期望的编译器错误。

答案 1 :(得分:0)

Internal是一个访问修饰符,其中类,方法或属性公开给同样嵌入在同一程序集中的任何类。

但是,声明为internal的类,方法或属性不会暴露给属于其他程序集的类。