Internal 关键字使用(1)

Internal修饰符可以用于类型或成员,使用该修饰符声明的类型或成员只能在同一程集内访问。

接口(Interface)的成员不能使用 internal 修饰符

值得注意的是,如果为 internal 成员加上了 protected 修饰符,这时的访问级别为 internal protected。只是看字面意思容易弄错,许多人认为 internal protected 应该是只有同一个程序集中的子类可以访问,但其实它表示同一个程序集中的所有类,以及所有程序集中的子类都可以访问

案例说明

Example05Lib 项目的 Class1

using System;

using System.Collections.Generic;

using System.Text;

 

namespace Example05Lib

{

      public class Class1

      {

          internal String strInternal = null;

          public String strPublic;

          internal protected String strInternalProtected = null;

      }

}

 

Results:
Example05Lib
项目的 Class2 类可以访问到 Class1 strInternal 成员,当然也可以访问到 strInternalProtected 成员,因为他们在同一个程序集里

 

Example05 项目里的 Class3 类无法访问到 Class1 strInternal 成员,因为它们不在同一个程序集里。但却可以访问到 strInternalProtected 成员,因为 Class3 Class1 的继承类

 

Example05 项目的 Program 类既无无法访问到Class1 strInternal 成员,也无法访问到 strInternalProtected 成员,因为它们既不在同一个程序集里也不存在继承关系

### Kotlin 中 `internal` 关键字的作用 在 Kotlin 中,`internal` 是一种访问修饰符,其主要功能是限定某个声明(如类、方法、属性等)仅在同一模块内可见[^2]。这意味着被标记为 `internal` 的成员可以在同一模块内的任何文件中访问,但在其他模块中则不可见。 #### 同一模块的定义 Kotlin 将模块视为一组编译在一起的源代码集合。通常情况下,一个 Gradle 或 Maven 子项目会被认为是一个独立的模块。因此,如果两个文件属于同一个构建配置下的不同包,则它们仍然共享相同的模块范围,并能够相互访问彼此的 `internal` 成员[^2]。 #### 使用场景 以下是 `internal` 访问修饰符的一些典型应用场景: 1. **跨包协作** 当某些实现细节需要在一个项目的多个包之间共享时,可以将其设置为 `internal` 而不是公开给整个世界。这样既保持了一定程度上的封装性,又允许必要的灵活性。 2. **测试支持** 单元测试经常位于单独的目录下但仍需调用生产环境中的逻辑。通过将这些部分设为 `internal` 可以让测试框架顺利运行而无需完全暴露 API 给外界用户[^2]。 3. **插件开发或库设计** 如果正在创建供第三方使用的库,那么可能希望隐藏大部分复杂的内部结构以免干扰使用者体验的同时保留足够的自由度去维护自己的代码质量。 下面展示了一个简单的例子说明如何运用此特性: ```kotlin // 文件 A (moduleA) package com.example.modulea internal fun helperFunction() { println("This is an internal function.") } class InternalClass { internal val property = "Internal Property" } ``` ```kotlin // 文件 B (still in moduleA but different package) package com.example.anotherpackage import com.example.modulea.helperFunction import com.example.modulea.InternalClass fun useInternalComponents() { helperFunction() val instance = InternalClass() println(instance.property) // 输出: Internal Property } ``` 尝试从另一个模块访问上述组件将会引发错误因为超出了许可边界。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值