当前位置:首页 » 《休闲阅读》 » 正文

C# Internal 一个访问修饰符,以internal 举例 温故而知新

24 人参与  2024年11月03日 19:21  分类 : 《休闲阅读》  评论

点击全文阅读


在 C# 中,internal 是一个访问修饰符,用于控制类、方法、属性或其他成员的可访问性。internal 翻译成中文是内部的  ,在编程中表示内部访问权限,这意味着带有 internal 修饰符的成员只能在同一个程序集(assembly)中访问,而不能在程序集外部访问。

1. 什么是 internal

简单来说,internal 关键字用于限制类或成员的访问范围,让它们只能在同一个项目或库中使用,而不能被项目外的代码访问。这样可以保护代码,防止其他程序集的代码直接调用内部实现。

程序集的概念:
一个程序集(assembly)通常指的是一个编译好的 .exe 或 .dll 文件。在项目中,所有代码都会被编译成一个程序集。使用 internal 可以确保类或成员只能在同一个程序集中访问,外部程序集无法访问。

2. internal 的使用场景

internal 可以应用于类、方法、属性、字段等多种类型。下面是常见的使用场景:

类:

internal class InternalClass
{
    public void Display()
    {
        Console.WriteLine("This is an internal class.");
    }
}

解释:这个类 InternalClass internal 的,因此它只能在同一个程序集内使用,无法在程序集外部访问。
方法:

public class MyClass
{
    internal void InternalMethod()
    {
        Console.WriteLine("This method is internal.");
    }
}
解释InternalMethod 是一个 internal 方法,它只能被同一程序集中的代码调用,其他程序集中的类无法调用它。

属性和字段:

public class MyClass
{
    internal string InternalProperty { get; set; }
}

解释InternalProperty 是一个 internal 属性,它的访问权限仅限于同一个程序集,外部代码无法访问它。

3. internal vs publicprivate

修饰符访问范围
public任何地方都可以访问,无论是在同一个程序集内还是外部程序集。
private仅限于同一个类或结构体内部访问,类的外部无法访问。
internal仅限于同一个程序集内访问,外部程序集无法访问。
protected仅限于派生类或同一个类中访问,外部类无法访问。
protected internal派生类或同一程序集内的类可以访问。

4. internal 的实际应用

internal 关键字在开发大型项目时特别有用,因为它可以帮助封装内部实现细节,防止外部程序集不小心或错误地调用项目中的内部代码。

应用场景:

封装库的内部逻辑:当开发一个库(如 DLL)时,库的开发者可能希望暴露一些公共 API 给外部使用者,但库的某些实现细节只希望在内部使用。此时就可以使用 internal 关键字将不希望外部访问的类或方法标记为 internal

控制访问范围internal 可以帮助开发者合理划分项目中的不同模块,确保只有同一模块内的代码可以访问特定的实现,而不必让整个系统的所有代码都能访问。

5. 例子

程序集 A(LibraryA.dll)

// 定义在 LibraryA.dll 中的类
internal class InternalClassA
{
    public void Display()
    {
        Console.WriteLine("内部类 A");
    }
}

public class PublicClassA
{
    internal void InternalMethod()
    {
        Console.WriteLine("公共类中的内部方法");
    }
}

解释InternalClassAinternal 的,因此它只能在 LibraryA.dll 中使用,其他程序集无法访问。PublicClassApublic 的,可以在其他程序集使用,但它的 InternalMethod 方法是 internal 的,因此只能在 LibraryA.dll 内部调用。
程序集 B(外部程序集,LibraryB.dll)

// 尝试访问 LibraryA.dll 中的类
public class AnotherClassB
{
    public void Test()
    {
        // InternalClassA a = new InternalClassA();  // 错误,无法访问 internal 类
        PublicClassA b = new PublicClassA();
        // b.InternalMethod();  // 错误,无法访问 internal 方法
    }
}

解释:在另一个程序集(LibraryB.dll)中,无法访问 LibraryA.dll 中的 internal 类或 internal 方法,编译器会报错。

6. 总结

internal 关键字用于限制类或成员只能在同一程序集内访问,外部程序集无法访问。它帮助开发者封装实现细节,避免外部系统不小心使用内部代码。internal 是介于 publicprivate 之间的一种访问修饰符,它适合在大型项目中用于模块化设计。

点击全文阅读


本文链接:http://m.zhangshiyu.com/post/181997.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 林语熙周晏京(离婚后,老公天天跪求复合全集阅读)最新章节免费在线阅读_《离婚后,老公天天跪求复合全集阅读》最新热门小说 -
  • 顾绫雪嬴政《被始皇读心后,文武百官卷疯了!完结版阅读》完整版免费在线阅读_(顾绫雪嬴政)全集免费阅读 -
  • 情深意长皆成空完整版阅读(沈卿林砚辞)抖音热文_《情深意长皆成空完整版阅读》最新章节免费在线阅读 -
  • 姐姐为暴富重伤傅家金孙后火葬场了全集阅读小说(傅延江瑶)全文免费阅读无弹窗大结局_(姐姐为暴富重伤傅家金孙后火葬场了全集阅读免费阅读全文大结局)最新章节列表_笔趣阁(姐姐为暴富重伤傅家金孙后火葬场了全集阅读) -
  • 乔以诺萧瑾淮(不是你好是我好全集阅读)精彩试读_《不是你好是我好全集阅读》全本阅读 -
  • 白月光双双《重生后我成全老公和白月光,他却急了全集》全文免费阅读无弹窗大结局_(白月光双双)最新章节免费在线阅读 -
  • 苏小枫苏末小说免费笔趣阁_苏小枫苏末小说全章完本大结局
  • 死遁后他疯了最新小说全文阅读_最新免费小说沈轻洲林梦江之雪_完本小说(死遁后他疯了)
  • 免费小说《顾里宋婷婷小岳欧颖倩》已完结(顾里宋婷婷小岳欧颖倩)热门小说大结局全文阅读笔趣阁
  • 侄子为求富贵,变性后全家后悔最新小说_免费小说全文阅读(苏小枫苏末)_侄子为求富贵,变性后全家后悔苏小枫苏末小说推荐完结
  • 最新《沈轻洲林梦江之雪》小说(全集完整新上小说大结局(沈轻洲林梦江之雪))全文阅读笔趣阁
  • 拒绝嫁给姐夫后,我在八零年代暴富了(陈小棠沈正韩)阅读 -

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1