C# 访问修饰符internal的访问范围误区释疑
一、前言
MSDN关于访问修饰符的访问级别解释:
访问修饰符是一些关键字,用于指定声明的成员或类型的可访问性。本节介绍四个访问修饰符:
使用这些访问修饰符可指定下列五个可访问性级别:
public:访问不受限制。
protected:访问仅限于包含类或从包含类派生的类型。
Internal:访问仅限于当前程序集。
protected internal:访问限制到当前程序集或从包含派生的类型的类别。
private:访问仅限于包含类型。
二、认知误区
internal,英文含义是“内部的”,这时候基础不扎实的同学,可能就混淆了这个“内部的”的确切含义,到底是指“同一命名空间”的内部,还是“同一程序集”的内部,本人就是突然被问到这个问题的时候,真的就犹豫了,而且曾经一度以为就是“同一命名空间”的内部(话外:我们太多时候都自以为了,其实只要自己稍微MSDN查一下,就很清楚了)。
第一部分已经摘抄了微软MSDN官方的解释,其实这个内部就是“同一程序集”的内部,也就是说,internal修饰的方法或者属性,只要是在同一个程序集的中的其他类都可以访问,如果二者不在同一命名空间,只要使用using引用上相应的命名空间即可,这里,从另外一个方面也间接看出命名空间并不是界定访问级别的,而是保证全局的类唯一性的,下面就从现实生活中解释下internal的实际作用。
三、释疑
都说艺术源于生活,编程也是一门艺术,所以一样也是可以成生活中找到相应的场景,下面我们以实际生活场景来描述internal修饰符的作用。
某公司的某技术中心,发文规定即日起,中心内的“打印机”仅限本中心的各个部门使用,其他中心的人员不能使用。这个现实生活的场景中,技术中心其实就是个程序集,而每个部门相当于不同的类,当然部门可以有相应的标签,相当于不同的命名空间,其实就是进行逻辑划分,职责不同的部门属于不同的命名空间就可以理解了。而我们的“主角”打印机的旁边就会被贴上公告“本中心的打印机只能本中心使用。。。。”,此时就相当于给打印机打上了internal修饰符了。其他中心的同学们,再也用不上本中心的打印机了。
下面我们用代码来描述上面的场景:
- 我们先在一个公共的类库中(程序集)定义一个打印机的类
namespace CommonAsset
{
public class Printer
{
private bool _isBad;
/// <summary>
/// 打印机是否坏了
/// </summary>
public bool IsBad
{
get { return _isBad; }
set { _isBad = value; }
} public void Print()
{
Console.WriteLine("开始打印!");
}
}
}
- 然后我们在创建一个中心A(程序集),分别定义各个部门,且属于不同的命名空间
-
namespace CenterA.Administration
{
public class DepartmentB
{
internal Printer PrinterB { get; set; }
public DepartmentB()
{
PrinterB = new Printer();
}
}
} namespace CenterA.Technology
{
public class DepartmentA
{
internal Printer PrinterA { get; set; }
public DepartmentA()
{
PrinterA = new Printer();
} public void PrintSomething()
{
if (PrinterA.IsBad)
{
CenterA.Administration.DepartmentB departmentB = new CenterA.Administration.DepartmentB();
departmentB.PrinterB.Print();
}
else
{
PrinterA.Print();
}
}
}
}
-
- 上面可以看见,DepartmentB和DepartmentA虽然不在同一个命名空间,但由于同属于CenterA这个程序集,DepartmentA是可以访问DepartmentB中的
Printer 的。
C# 访问修饰符internal的访问范围误区释疑的更多相关文章
- 访问修饰符internal
internal(C# 参考) internal 关键字是类型和类型的成员 访问修饰符. 只有在同一程序集的文件中,内部类型或成员才是可访问的,如下例所示: public class BaseClas ...
- C#的internal访问修饰符
文章:C# 访问修饰符internal的访问范围误区释疑 internal访问修饰符限定的类,只能在本程序集中访问.
- 深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)
访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protec ...
- 【转】C# 中访问修饰符
用通过代码: 类内部 using System;class Mod{ void defaultMethod() { Console.WriteLine("this ...
- c# 访问修饰符的访问权限
1. 访问修饰符. 指定声明的类型和类型成员的可访问性. (1) public:是类型和类型成员的访问修饰符.公共访问是允许的最高访问级别.对访问公共成员没有限制. (2) private:是一个成员 ...
- C#学习-图解教程(2):访问修饰符(其中两种)
学习内容:C#:学习书籍:图解教程(中文第四版). 目录:第四章 类的基本概念 -----> 4.8 访问修饰符 访问修饰符 从类的内部,任何函数成员都可以使用成员的名称访问类中任意的其他成员. ...
- [No0000E7]C# 封装 与访问修饰符
C# 支持的访问修饰符: Public Private Protected Internal Protected internal Public 访问修饰符 Public 访问修饰符允许一个类将其成员 ...
- C# 访问修饰符和const、readonly
今天被人问起const和readonly,竟然有点咬不准,复习一遍. 访问修饰符 public 公有访问.不受任何限制. private 私有访问.只限于本类成员访问,子类,实例都不能访问. prot ...
- [.net基础]访问修饰符
标题:[.net基础]访问修饰符 一.前言 基础掌握不牢固啊,所以记录下来. 二.方法访问修饰符Internal (1).创建工程ParentAndSon (2).添加类ModelA namespac ...
随机推荐
- 页面跳转,A跳到B,B再返回A时自动定位到离开A时的位置
<template> <div class="hello" @scroll="scrollLoad" id="myScrollBox ...
- Vue源码学习三 ———— Vue构造函数包装
Vue源码学习二 是对Vue的原型对象的包装,最后从Vue的出生文件导出了 Vue这个构造函数 来到 src/core/index.js 代码是: import Vue from './instanc ...
- 牛客小白月赛2 G 文 【模拟】
链接:https://www.nowcoder.com/acm/contest/86/G来源:牛客网 题目描述 Sεlιнα(Selina) 开始了新一轮的男友海选.她要求她的男友要德智体美劳样样都全 ...
- JDK1.8简单配置环境变量---两步曲
鄙人最近重新装完系统之后,在安装和配置jdk1.8的时候,发现网上许多教程配置jdk环境变量时都还在沿用传统的方式配置,但是随着技术的更新,完全没有必要那么麻烦了. 下载和安装jdk的教程,在这里就不 ...
- DNS介绍与安装使用
DNS简介 DNS是互联网的一项服务.它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网.DNS使用TCP和UDP的53号端口. DNS服务的基本概念 在使用DNS前需要了解 ...
- ajax状态值和状态码
AJAX状态值是指,运行AJAX所经历过的几种状态,无论访问是否成功都将响应的步骤,可以理解成为AJAX运行步骤.如:正在发送,正在响应等,由AJAX对象与服务器交互时所得:使用“ajax.ready ...
- POJ:2456-Aggressive cows
Aggressive cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18313 Accepted: 8716 Desc ...
- mysql学习第二天函数
-- 1.绝对值 select abs(-1)from dual -- 2.求平方根select sqrt(6)from dual -- 3.圆周率select pi()from dual -- 4. ...
- [Azure Storage]使用Java上传文件到Storage并生成SAS签名
Azure官网提供了比较详细的文档,您可以参考:https://azure.microsoft.com/en-us/documentation/articles/storage-java-how-to ...
- PCB工艺要求
项目 加工能力 工艺详解 层数 1~6层 层数,是指PCB中的电气层数(敷铜层数).目前嘉立创只接受1~6层板. 板材类型 FR-4板材 板材类型:纸板.半玻纤.全玻纤(FR-4).铝基板,目 ...