• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#中的Internal关键字小结

C#中的Internal关键字小结

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了马桶c的个人空间,欲情 c max,维生素c,奔驰c200,85度c等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

首先,理清几个概念:项目(project)、解决方案(solution)、程序集(assembly)、命名空间(namespace)。

项目(project)  就是我们开发的一个软件。.NET下,项目有多种类型,如控制台、Windows应用程序、类库、Web应用程序等等。经过编译后,会生成.exe文件和.dll文件。 .exe文件有统一的主程序入口,可以被执行,而类库只是提供一些功能给其他项目调用。

解决方案(solution)  当我们在VS中新建任何一种类型的项目时,这个项目还属于一个解决方案。当我们的业务相对简单时,解决方案所发挥的作用并不是很大。但当我们开发复杂的软件时,需要多个模块组成。比如说开发中常用的三层架构,U层是一个简单的windows应用程序(项目的一种类型),B、D层由多个类库(项目的另一种类型)组成。通过一个解决方案,我们就可以将其多个项目组合起来,完成我们的开发。形象地说,解决方案就是一个容器,在这个容器里,分成好多层,好多格,用来存放不同的项目。换句话来说就是:程序集就是一个项目,多个项目构成一个解决方案。
程序集(assembly)  一个项目就是一个程序集。一个程序集可以体现为一个dll文件,或者exe文件。

命名空间(namespace)  主要是为了避免一个项目中,可能会存在的相同对象名的冲突。

从编辑上来说,命名空间仅仅是在类型名称前加了一些由点号隔开的符号而已,这使得一个类型的名称更长,从而也更具惟一性。如果两个相同的类在同一个命名空间则会冲突,如果不同的命名空间有相同的类型,也会产生二义性。

注意,C#的using指示符会指示编译器试着在类型名上添加不同的前缀,直到找到一个匹配为止。命名空间只是逻辑上,真正的类型在程序集里。当查找一个类型的定义时,编译器必须被告知到哪些程序集中进行查找,编译器将扫描它知道的所有程序集来查找类型的定义。一旦编译器找到了正确的程序,程序集信息和类型信息会被添加到生成托管模块的元数据中。
重要提示:CLR不知道命名空间的任何事情。访问一个类型时,CLR需要知道类型的完整名称(这可能是一个相当长、包含句点符号的名称)以及该类型的定义具体在哪一个程序集中。这样一来,“运行时”才能加载正确的程序集,找到目标类型,并对其进行操作。

联系与区别:

命名空间是类库的逻辑组织形式,程序集就是类库的物理组织形式

一个程序集内可能有多个命名空间,一个命名空间可能存在于不同的程序集中

程序集是实现类型的文件,编译之后生成的。命名空间是对类型的逻辑分组。

C#编译器可能比较关心命名空间,因为它需要确定类的完整名称,然后交给CLR。CLR只关心程序集,会通过类的完整名称加载对应的程序集

总结:

  通过在项目中使用分部类,发现可以通过分部类实现对这个类的扩充和完善。而使用分部类时我们会对命名空间进行修改,进而将类进行扩展,这就是我们说的一个命名空间可以存在于不同的程序集。通过项目去不断成长,努力去做,《关于分部类的介绍可以访问下面地址:https://msdn.microsoft.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();  // 错误,无法实例化
   }
 }
</div>

  在示例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;  // 错误,因为不能访问内部成员
  }
 }
</div>

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

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#利用ReportViewer生成报表
  • C#基于正则去掉注释的方法示例
  • C#中new的用法及与override的区别分析
  • C#实现两个richtextbox控件滚动条同步滚动的简单方法
  • C# for循环的经典案例集锦
  • C#操作word的方法示例
  • C#使用WebClient登录网站并抓取登录后的网页信息实现方法
  • C# WinForm制作异形窗体与控件的方法
  • C#实现Excel表数据导入Sql Server数据库中的方法
  • C#使用NPOI上传excel

相关文章

  • 2017-05-28深入C#任务管理器中应用程序选项隐藏程序本身的方法详解
  • 2017-05-28枚举的用法详细总结
  • 2017-05-28C#网页跳转方法总结
  • 2017-05-28C#验证码识别类完整实例
  • 2017-05-28C#中结构体和字节数组转换实现
  • 2017-05-28C#的WebBrowser的操作与注意事项介绍
  • 2017-05-28深入解析C#设计模式编程中对建造者模式的运用
  • 2017-05-28C#标识符的使用小结
  • 2017-05-28c#使用win32api实现获取光标位置
  • 2017-05-28c#实现抓取高清美女妹纸图片

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#获取目录最后访问时间的方法
    • c# 随机函数的使用详解
    • C#中Convert.ToInt32()和int.Parse()的区别介绍
    • c# mutex互斥量的深入解析
    • .NET中的Timer类型用法详解
    • C# 定时器定时更新的简单实例
    • winform壁纸工具为图片添加当前月的日历信息
    • C#使用oledb导出数据到excel的方法
    • C#中怎么将一个List转换为只读的
    • C#冒泡法排序算法实例分析

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有