首页 > 编程语言 >C# 关键字之internal详解

C# 关键字之internal详解

时间:2024-03-11 23:34:25浏览次数:21  
标签:C# void 程序 class internal Common public 详解

原文链接:https://blog.csdn.net/weixin_42565127/article/details/130927438

一、internal
我们都知道的三种类型/成员修饰符public、protected、private,也明白它们所表示的含义,internal也是一各类型/成员修饰符(被修饰的类型或者成员称为内部类型或成员),只是它所修饰的类只能在同一个程序集中被访问,而同一个程序集表示同一个dll程序集或同一个exe程序集。在vs中一个项目会生成一个dll文件,因此这个dll或这个项目也就是一个程序集。
比如有一个程序集有:

namespace Common
{
    internal class A
    {
        public void aa()
        {
        }
    }
    public class B
    {
        public void bb()
        {
            //这样是正确的
            A a = new A();
            a.aa();
        }
    }
} 

  如果另一个项目TestWeb引用了此dll,即common.dll,即

using Common;
namespace TestWeb
{
    public class Test
    {
        public void test_1()
        {
            //这样是出错的
            A a = new A();
            a.aa();
 
            //这样是正确的
            B b = new B();
            b.bb();
        }
    }
}

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

二、protected internal

一般一个成员或类型只能有一个访问修饰符,但使用protected internal组合时除外,它的访问仅限于从包含类派生的当前程序集或类型。即我们可以在本程序集中访问,也可以在其他程序集中继承访问。

namespace Common
{
    protected internal class C
    {
        public void cc()
        {
        }
    }
} 
 
namespace TestWeb
{
    public class TestA
    {
        public void test_1()
        {
            //这样是出错的
            Common.C c = new Common.C();
            c.cc();
        }
    }
    public class TestB : Common.C
    {
        public void test_2()
        {
            //这样是正确的
            C c = new C();
            c.cc();
        }
    }
}

  

另外附上程序集的特性:

1.程序集是任何 .NET Framework 应用程序的基本构造块。例如,在生成简单的 C# 应用程序时,Visual Studio 创建一个单个可移植可执行 (PE) 文件形式的程序集,明确地说就是一个 EXE 或 DLL。
2.包含描述它们自己的内部版本号和它们包含的所有数据和对象类型的详细信息的元数据。
3.仅在需要时才加载。如果不使用程序集,则不会加载。这意味着程序集可能是在大型项目中管理资源的有效途径。
4.可以包含一个或多个模块。例如,计划较大的项目时,可以让几个各个开发人员负责单独的模块,并通过组合所有这些模块来创建单个程序集。

标签:C#,void,程序,class,internal,Common,public,详解
From: https://www.cnblogs.com/Dongmy/p/18067362

相关文章

  • Typecho Joe主题添加文章目录导航
    方法和样式参考https://www.wlplove.com/archives/84/1、安装Menutree插件wgethttps://github.com/typecho-fans/plugins/releases/download/plugins-M_to_R/MenuTree.zip解压后放到typecho插件目录2、修改主题模版编辑Joe主题文件夹public/aside.php文件<sectionclass="......
  • CVE-2023-49442 利用分析
    1.漏洞介绍JEECG(J2EECodeGeneration)是开源的代码生成平台,目前官方已停止维护。JEECG4.0及之前版本中,由于/api接口鉴权时未过滤路径遍历,攻击者可构造包含 ../的url绕过鉴权。攻击者可构造恶意请求利用 jeecgFormDemoController.do?interfaceTest接口进行jndi注入攻击实现......
  • BUUCTF靶机笔记
    BUUBRUTE11启动靶机后可以看到是一个登陆页面查看源代码:没有有用的信息只是单纯的html页面随便填一个用户:admin密码:123提示密码为四位怀疑是暴力破解使用burp进行单点爆破payload设定暴力完成查看length不同的数据包返回flag:flag{6982d5b6-a2f8-48d8-aec6......
  • DBever导入越南文Excel
    HelloWorld有一个Excel文件中含有越南文1、将其另存为CSV,注意选择UTF-8格式的CSV。2、原文件的编码改成UTF-83、表映射中的目标字段的类型设置成nvarchar格式。......
  • pg distinct 改写递归优化(德哥的思路)
    德哥的优化思路巨牛逼,这种递归思维真的太吊了,我目前就缺递归思路。 下面SQL1000W行数据,列的选择性很低,只有两个值('1'和'11')都是字符串类型,'1'只有一条数据,'11'有9999999行数据。慢SQL:selectdistinctcolfromtt;......
  • JAVA常用类--AutoCloseable接口
    AutoCloseable接口自动关闭,释放资源机制在实际的项目开发过程中,一般都有可能连接到一些资源,比如:文件资源、网络资源、数据库资源,在实际项目之中进行资源访问的社会一般有如下几个操作步骤:不使用AutoCLoseable:手动定义关闭函数按照正常的结构设计来讲,当前的程序已经可以满足......
  • C#堆栈(Stack)
    原文链接:https://www.cnblogs.com/daihaoliulingyi601/p/17947263在C#中,堆栈类表示一个后进先出的对象集合,当你需要对项目进行后进先出的访问时,则可以使用堆栈。向堆栈中添加元素称为推入元素,从堆栈中移除元素称为弹出元素。一、堆栈类中的属性下表列出了堆栈类中的一些常用的......
  • JAVA常用类--Cleaner类
    Cleaner类注意:在JDK1.9以上版本可使用在Java程序中提供有GC的垃圾回收机制,如果发现堆内存不足时一定要进行垃圾回收以释放内存空间但如果某些对象在回收前需要做一些处理,可以通过覆写Object类中的finalize()方法来实现这种回收前的处理finalize()方法的定义:@Deprecated(sin......
  • Docker compose部署Typecho博客系统
    编辑docker-compose.yml文件:services:typecho:image:joyqi/typecho:nightly-php8.2-apacherestart:alwaysports:-8086:80#端口映射,把博客默认的80端口映射到8086端口environment: TYPECHO_DB_HOST:typecho_db#默认值是localhost,docker......
  • 部署测试平台-使用docker安装mysql
    1.拉取mysql5.7镜像:dockerpullmysql:5.72.新建数据库挂载目录:mkdir-p/root/data/mysql5.7/conf   配置文件mkdir-p/root/data/mysql5.7/data   数据库数据目录mkdir-p/root/data/mysql5.7/log   数据库日志3.把配置文件my.cnf放到/root/data/m......