C#中Internal关键字总结

 2024-01-16 03:06:46  阅读 0

注意:如果你想彻底理解关键词,请耐心读到底。 当然,这篇文章只是其他文章的总结。 也算是引用一下。主要是为了理清知识点

在进入正题之前,我们先来了解一下项目、解决方案、程序集、命名空间这四个容易混淆的概念。

①项目:是我们开发的一个软件。 .NET下,项目的类型有很多种,比如控制台、应用程序、类库、Web应用程序等,编译后会生成.exe文件和.dll文件。 .exe文件有统一的主程序入口。

可以执行,类库只提供部分函数供其他项目调用。

②解决方案:当我们在VS中新建任意类型的项目时,这个项目仍然是一个解决方案。 当我们的业务相对简单时,解决方案并没有发挥很大的作用。 但是当我们开发复杂的软件时,我们需要多个模块。

例如,开发中常用的三层架构中,U层是一个简单的应用程序(一类项目),B层和D层由多个类库组成(另一类项目)。 通过一种解决方案,我们可以将它们(多个项目)组合起来完成我们的开发。

形象地说,解决方案就是容器。 在这个容器中,它分为很多层和很多隔间来存放不同的项目。 换句话说:“一个程序集就是一个项目,多个项目构成一个解决方案”

③装配:一个项目就是一个装配。 程序集可以体现为 dll 文件或 exe 文件。

④ 命名空间:主要是为了避免项目中可能存在的相同对象名称发生冲突。

对于编辑器来说,命名空间只是在类型名称前添加一些用点分隔的符号。 这使得类型的名称更长,因此更独特。 如果两个相同的类位于同一个命名空间中,如果不同的命名空间具有相同的类型,则会发生冲突。

也可能出现歧义。

请注意,C# 的 using 指令指示编译器尝试向类型名称添加不同的前缀,直到找到匹配项。 命名空间只是逻辑上的。 真正的类型在程序集中。 当查找类型的定义时,必须告诉编译器要查找哪些程序集,

编译器扫描它知道的所有程序集以查找类型定义。 一旦编译器找到正确的程序,程序集信息和类型信息就会添加到生成托管模块的元数据中。

重要提示:CLR 对命名空间一无所知。 访问类型时,CLR 需要知道类型的全名(可能是一个相当长的名称,其中包含句点)以及该类型是在哪个程序集中定义的。

这样,“运行时”就可以加载正确的程序集,找到目标类型,并对其进行操作。

2.联系与区别

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

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

3.是实现类型文件,编译后生成。

命名空间是类型的逻辑分组。

4. C#编译器可能更关心命名空间,因为它需要确定类的完整名称,然后交给CLR。

CLR只关心程序集,会通过类的全名加载相应的程序集。

三、总结

通过在项目中使用部分类,我发现这个类可以通过部分类进行扩展和改进。 使用分部类时,我们会修改命名空间并扩展类; 这就是我们所说的命名空间可以存在于不同的程序集中的意思。

通过项目不断成长并努力工作。 “有关分支课程的介绍,您可以访问以下地址:”

1.(内部):仅限于同一个程序集中可以访问,可以跨类访问。

(受保护):它仅限于只能在继承的子类中访问,并且可以跨程序集。

:受保护的“或”内部修饰符修改成员。 当父类和子类在同一个程序集中时,成员是可见的。 当父类和子类不在同一个程序集中时,子类不能访问父类的成员,但子类可以访问父类的成员。

也就是说,可以从当前程序集或从包含类派生的类型访问具有访问修饰符的类型或成员。

2. 关键字是类型和类型成员访问修饰符。内部类型或成员只能在同一程序集中的文件内访问

内部访问通常用于基于组件的开发,因为它使一组组件能够以私有方式进行协作,而不必将其暴露给应用程序代码的其余部分。

例如,用于构建图形用户界面的框架可以提供一个 Form 类和一个通过使用具有内部访问权限的成员进行协作的 Form 类。

由于这些成员是内部成员,因此他们不会接触到使用该框架的代码。

3. 从定义类型或成员的程序集外部引用具有内部访问权限的类型或成员是错误的。

此示例包含两个文件(意味着这些文件不在同一程序集中):.cs 和 .cs。 第一个文件包含内部基类。 在第二个文件中,尝试实例化将产生错误。

// 。CS

// 和: /:

班级

int intM = 0;

// 。CS

// 与: /:.dll

班级

无效主()

=新的(); // 错误,无法实例化

在此示例中,使用示例 1 中使用的相同文件并将可访问性级别更改为 . 还将成员 IntM 的可访问级别更改为 。 在这种情况下,您可以实例化该类,但无法访问内部成员。

// 。CS

// 和: /:

班级

int intM = 0;

// 。CS

// 与: /:.dll

班级

无效主()

=新的(); // 好的。 类可以被实例化

.intM = 444; // 由于无法访问内部成员而生成错误

标签: 程序 类型 命名

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码