C#中的Internal关键字小结

2019-12-30 17:23:50王冬梅

总结:

  通过在项目中使用分部类,发现可以通过分部类实现对这个类的扩充和完善。而使用分部类时我们会对命名空间进行修改,进而将类进行扩展,这就是我们说的一个命名空间可以存在于不同的程序集。通过项目去不断成长,努力去做,《关于分部类的介绍可以访问下面地址:https://www.easck.com/zh-cn/library/wa80x488.aspx 》

1、internal(内部):限定的是只有在同一程序集中可访问,可以跨类

    protected(受保护):限定的是只有在继承的子类中可访问,可以跨程序集
    protected internal:受保护“或”内部修饰符修饰成员,当父类与子类在同一个程序集中,internal成员可见。当父类与子类不在同一个程序集中,子类不能访问父类internal成员,而子类可以访问父类的ptotected internal成员,
    即,从当前程序集或从包含类派生的类型,可以访问具有访问修饰符protected internal的类型或成员。

2、internal关键字是类型和类型的成员访问修饰符。只有在同一程序集的文件中,内部类型或成员才是可访问的。内部访问通常用于基于组件的开发,因为它使一组组件能够以私有方式进行合作,而不必向应用程序代码的其余部分公开。例如,用于生成图形用户界面的框架可以提供Control和Form类,这两个类通过使用具有内部访问权限的成员进行合作。由于这些成员是内部的,它们不向正在使用框架的代码公开。

3、从定义具有内部访问能力的类型或成员的程序集外部引用该类型或成员是错误的。示例1包含两个文件(表示两个文件不在同一个程序集中):Assembly1.cs 和 Assembly2.cs。第一个文件包含内部基类BaseClass,在第二个文件中,实例化BaseClass的尝试将产生错误:

示例1:


 // Assembly1.cs
 internal class BaseClass 
 {
   public static int intM = 0;
 }
 // Assembly2.cs
 // Compile with:Assembly1.dll
 class TestAccess 
 {
   static void Main() 
   {
     BaseClass myBase = new BaseClass();  // 错误,无法实例化
   }
 }

  在示例2中,使用与示例1中所用相同的文件,并将BaseClass的可访问性级别更改为public,还将成员IntM的可访问性级别更改为internal。在此例中,可以实例化类,但不能访问其内部成员:

示例2:


 // Assembly1.cs
 public class BaseClass 
 {
   internal static int intM = 0;
 }
 // Assembly2.cs
 // Compile with:Assembly1.dll
 public class TestAccess 
 {
   static void Main() 
   {
     BaseClass myBase = new BaseClass();  // Ok,可以实例化类
     BaseClass.intM = 444;  // 错误,因为不能访问内部成员
  }
 }

以上所述是小编给大家介绍的C#中的Internal关键字小结,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对ASPKU网站的支持!