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 ...
随机推荐
- Ajax_GET的一个基本用法
Ajax_GET的一个基本用法 首先先创建一个Server.js文件 //1.引入express// const { response } = require('express');const ex ...
- 原子操作atomic解读
下面从一个问题引入: // ConsoleApplication5.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include<ran ...
- ubuntu输入正确密码重新跳到登录界面
原因一:/etc/profile或者/etc/enviroment 配置错误 (很多开发人员在配置完java环境之后容易出现这种情况) 解决办法(已验证): 1,开机后在登录界面按下shift+c ...
- log4j学习记录以及相关配置(精简版)
使用log4j时关键配置 log4j的maven依赖 <dependency> <groupId>log4j</groupId> <artifactId> ...
- 幸运转轮(Cakra)
题目描述 lxx参加了某卫视举办的一场选秀节目,凭借曼妙的舞姿和动人的歌声,他在众多idol中脱颖而出.现在在他的面前,有四个大转轮,这四个转轮将决定他能否赢得最终大奖--出道,机会只有一次! 每 ...
- 关于使用学生或者教师身份免费使用JetBrains全家桶的说明
官网操作 JetBrains是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄罗斯的圣彼得堡及美国麻州波士顿都设有办公室,该公司有众多的好用的IDE,比如pycharm,webstorm,Int ...
- CSS实现事件穿透与背景图不跟随滚动条
1. 事件穿透属性:pointer-events: none // auto默认值.none:不捕捉target事件(实现穿透) 用途:当需要使用透明遮罩并且允许点击遮罩下方元素时,或需要使用背景容 ...
- JVM学习二:JVM之GC算法和种类
我们前面说到了JVM的常用的配置参数,其中就涉及了GC相关的知识,趁热打铁,我们今天就学习下GC的算法有哪些,种类又有哪些,让我们进一步的认识GC这个神奇的东西,帮助我们解决了C 一直挺头疼的内存回收 ...
- 将一个读取流转换成bitmap对象
将一个读取流转换成bitmap对象: BitmapFactory:可以将文件,读取流,字节数组转换成一个Bitmap对象. Bitmap bitmap = Bitma ...
- Net6 DI源码分析Part3 CallSiteRuntimeResolver,CallSiteVisitor
CallSiteRuntimeResolver CallSiteRuntimeResolver是实现了CallSiteVisitor之一. 提供的方法主要分三个部分 自有成员方法 Resolve提供服 ...