C# 成员访问修饰符protected internal等
1.C#4个修饰符的权限
修饰符 级别 适用成员 解释
public 公开 类及类成员的修饰符 对访问成员没有级别限制
private 私有 类成员的修饰符 只能在类的内部访问
protected 受保护的 类成员的修饰符 在类的内部或者在派生类中访问,不管该类和派生类是不是在同一程序集中
internal 内部的 类和类成员的修饰符 只能在同一程序集(Assembly)中访问
protected internal 受保护的内部:如果是继承关系,不管是不是在同一程序集中都可以访问;如果不是继承关系只能在同一程序集中访问
private protected访问限于包含类或当前程序集中派生自包含类的类型。 自 C# 7.2 之后可用。 //编译器会提示多个保护修饰符
访问权限权重:public>protected internal>protected>internal>private protected>private


以下是 private internal用法详细讲解
在解决方案ConsonApp1有两个项目: CsLearnTool、School 。生成两个程序集CsLearnTool.dll、School.dll
School.dll 程序集
using System; namespace School
{ public class Test
{ static void Main(string[] args)
{ }
}
public class People
{
private protected string myName = "";
} public class Student : People
{
void Access()
{
var baseObject = new People(); //错误 CS1540 无法通过“People”类型的限定符访问受保护的成员“People.myName”
// classes Student from People.
baseObject.myName = "小红"; // 正确
myName = "liming";
}
}
}
CsLearnTool.dll程序集
using System;
using System.Reflection;
using System.ComponentModel;
using System.Text;
using System.Globalization;
using System.Threading;
using System.Diagnostics;
using System.Collections;
using System.Collections.Generic;
using School; namespace CsLenrnTool
{
class CsLenrnTool
{
static void Main(string[] args)
{ } class Teacher : People
{
void Access()
{
//错误 CS0122 “People.myName”不可访问,因为它具有一定的保护级别
myName = "liming";
}
} } }
通过以上案例我们可以得出:在同一个程序集中 子类可以直接使用 父类的中 带有private protected 修饰符的成员 。同一个程序集中 无法通过实例化的方式访问父类中的private protected 修饰符的成员。
在不同一个程序集中不能 子类不能 直接使用 父类的中 带有private protected 修饰符的成员
以下是protected internal用法详解
School.dll 程序集
using System; namespace School
{ public class Test
{ static void Main(string[] args)
{ }
}
public class People
{
protected internal string myName = "";
} public class Student : People
{
void Access()
{
var baseObject = new People(); // 正确
baseObject.myName = "小红"; // 正确
myName = "liming";
}
}
}
School.dll 程序集
using System;
using System.Reflection;
using System.ComponentModel;
using System.Text;
using System.Globalization;
using System.Threading;
using System.Diagnostics;
using System.Collections;
using System.Collections.Generic;
using School; namespace CsLenrnTool
{
class CsLenrnTool
{
static void Main(string[] args)
{ } class Teacher : People
{
void Access()
{
People pl = new People();
pl.myName = "";//错误 CS1540 无法通过“People”类型的限定符访问受保护的成员“People.myName”
//正确
Teacher tl = new Teacher();
tl.myName = "";
myName = "liming";
}
}
} }
protected internal 和 protected 的区别
proteced


protected internal


C# 成员访问修饰符protected internal等的更多相关文章
- 访问修饰符protected
protected(C# 参考) protected 关键字是一个成员访问修饰符. 受保护成员在其所在的类中可由派生类实例访问. 示例只有在通过派生类访问时,基类的受保护成员在派生类中才是可访问的. ...
- Java 声明和访问控制(三) finalize方法 成员访问修饰符
finalize()方法是Object类的一个方法,在垃圾回收器执行的时候,会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源的回收,例如文件关闭等. 成员访问修饰符: 默认访问:包访问 ...
- c#中的访问修饰符Protected,privet ,public, internal,和internal protected
Protected,privet ,public, internal,和internal protected的区别 Private修饰的,只能值类内部使用,外部不可以使用,子类不能直接访问,但可以通过 ...
- C# JAVA成员访问修饰符比较
在面向对象的访问修饰符中常用的有public ,private ,protected C# 访问修饰符: private < protected internal < internal/p ...
- 12、类成员访问修饰符public/private/producted/readonly
1.private 类的私有成员 private 类的私有成员,只能在内部访问,在外部访问不到,无法被继承,我们可以将不需要被外部修改的定义为私有的 私有成员,只能在内部访问,在外部访问不到 priv ...
- java 成员访问修饰符
作用域 当前类 当前包(package) 子类 其他包(package) public ok ok ok ok protected ok ok ok no default ok ok no no pr ...
- 访问修饰符internal
internal(C# 参考) internal 关键字是类型和类型的成员 访问修饰符. 只有在同一程序集的文件中,内部类型或成员才是可访问的,如下例所示: public class BaseClas ...
- [No0000E7]C# 封装 与访问修饰符
C# 支持的访问修饰符: Public Private Protected Internal Protected internal Public 访问修饰符 Public 访问修饰符允许一个类将其成员 ...
- C#和Java访问修饰符的比较
访问修饰符对于C#:类 的默认修饰符是 internal(外部类只能被public / internal 修饰)枚举 的默认修饰符是 public 且此类型不允许其它访问修饰符接口 的默认修饰符是 i ...
随机推荐
- 实习之bii--在vsphere client 给esxi上的虚拟机增加U盘识别
esxi上安装虚拟机默认不包含U盘控制器,在服务器上插U盘也不会识别,所以要通过客户端登陆esxi管理为虚拟机增加U盘控制器,步骤如下: 1.首先登陆服务器的管理ip 2.选择一部虚拟机,进行编辑设置 ...
- golang中的标准库数据格式
数据格式介绍 是系统中数据交互不可缺少的内容 这里主要介绍JSON.XML.MSGPack JSON json是完全独立于语言的文本格式,是k-v的形式 name:zs 应用场景:前后端交互,系统间数 ...
- Druid未授权访问实战利用
Druid未授权访问实战利用 最近身边的同学都开始挖src了,而且身边接触到的挖src的网友也是越来越多.作者也是在前几天开始了挖src之路.惊喜又遗憾的是第一次挖src就挖到了一家互联网公司的R ...
- a-b转换A-B
- 新年好 takoyaki,期待再次与你相见
一.序 今天是中国农历一年的最后一天,往年都叫年三十,今年没有三十,最后一天是二十九.厨房的柴火味.窗外的鞭炮声还有不远处传来的说笑声,一切都是熟悉味道,新年到了,家乡热闹起来了.平常左邻右舍都是看不 ...
- Mac OS Fusion Linux虚拟机网络设置
1.设定网络为nat 2.ifconfig查看mac机的ip 3.进入虚拟机设定网络,手动指定自己ip为mac机网段ip,xxx.xxx.xxx.2是固定的路由及DNS的ip 4.关闭再打开网络即可访 ...
- http中的8种请求介绍
HTTP协议的8种请求类型介绍 HTTP协议中共定义了八种方法或者叫"动作"来表明对Request-URI指定的资源的不同操作方式,具体介绍如下: OPTIONS:返回服务器针对特 ...
- contos 6.9 和 centos7 配置docker?
一.contos 6.9 配置docker? 1.检查centos的内核,因为目前docker的版本所支持的centos最低内核版本为2.4 // uname -r // 2.6.32-696.el6 ...
- 势能分析(splay分析)
定义 第\(x\)次操作后,势能为\(\phi(x)\),该操作实际复杂度\(c(x)\),均摊复杂度\(a(x)\). 定义\(a(x)=c(x)+\phi(x)-\phi(x-1)\). 那么总复 ...
- 入门-k8s部署应用 (三)
Kubernetes 部署应用 在 k8s 上进行部署前,首先需要了解一个基本概念 Deployment Deployment 译名为 部署.在k8s中,通过发布 Deployment,可以创建应用程 ...