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等的更多相关文章

  1. 访问修饰符protected

    protected(C# 参考) protected 关键字是一个成员访问修饰符. 受保护成员在其所在的类中可由派生类实例访问. 示例只有在通过派生类访问时,基类的受保护成员在派生类中才是可访问的. ...

  2. Java 声明和访问控制(三) finalize方法 成员访问修饰符

    finalize()方法是Object类的一个方法,在垃圾回收器执行的时候,会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源的回收,例如文件关闭等. 成员访问修饰符: 默认访问:包访问 ...

  3. c#中的访问修饰符Protected,privet ,public, internal,和internal protected

    Protected,privet ,public, internal,和internal protected的区别 Private修饰的,只能值类内部使用,外部不可以使用,子类不能直接访问,但可以通过 ...

  4. C# JAVA成员访问修饰符比较

    在面向对象的访问修饰符中常用的有public ,private ,protected C# 访问修饰符: private < protected internal < internal/p ...

  5. 12、类成员访问修饰符public/private/producted/readonly

    1.private 类的私有成员 private 类的私有成员,只能在内部访问,在外部访问不到,无法被继承,我们可以将不需要被外部修改的定义为私有的 私有成员,只能在内部访问,在外部访问不到 priv ...

  6. java 成员访问修饰符

    作用域 当前类 当前包(package) 子类 其他包(package) public ok ok ok ok protected ok ok ok no default ok ok no no pr ...

  7. 访问修饰符internal

    internal(C# 参考) internal 关键字是类型和类型的成员 访问修饰符. 只有在同一程序集的文件中,内部类型或成员才是可访问的,如下例所示: public class BaseClas ...

  8. [No0000E7]C# 封装 与访问修饰符

    C# 支持的访问修饰符: Public Private Protected Internal Protected internal Public 访问修饰符 Public 访问修饰符允许一个类将其成员 ...

  9. C#和Java访问修饰符的比较

    访问修饰符对于C#:类 的默认修饰符是 internal(外部类只能被public / internal 修饰)枚举 的默认修饰符是 public 且此类型不允许其它访问修饰符接口 的默认修饰符是 i ...

随机推荐

  1. Ajax_GET的一个基本用法

    Ajax_GET的一个基本用法 首先先创建一个Server.js文件 ​//1.引入express// const { response } = require('express');const ex ...

  2. 原子操作atomic解读

    下面从一个问题引入: // ConsoleApplication5.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include<ran ...

  3. ubuntu输入正确密码重新跳到登录界面

     原因一:/etc/profile或者/etc/enviroment  配置错误 (很多开发人员在配置完java环境之后容易出现这种情况) 解决办法(已验证): 1,开机后在登录界面按下shift+c ...

  4. log4j学习记录以及相关配置(精简版)

    使用log4j时关键配置 log4j的maven依赖 <dependency> <groupId>log4j</groupId> <artifactId> ...

  5. 幸运转轮(Cakra)

    题目描述 lxx参加了某卫视举办的一场选秀节目,凭借曼妙的舞姿和动人的歌声,他在众多idol中脱颖而出.现在在他的面前,有四个大转轮,这四个转轮将决定他能否赢得最终大奖--出道,机会只有一次!   每 ...

  6. 关于使用学生或者教师身份免费使用JetBrains全家桶的说明

    官网操作 JetBrains是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄罗斯的圣彼得堡及美国麻州波士顿都设有办公室,该公司有众多的好用的IDE,比如pycharm,webstorm,Int ...

  7. CSS实现事件穿透与背景图不跟随滚动条

    1. 事件穿透属性:pointer-events: none  // auto默认值.none:不捕捉target事件(实现穿透) 用途:当需要使用透明遮罩并且允许点击遮罩下方元素时,或需要使用背景容 ...

  8. JVM学习二:JVM之GC算法和种类

    我们前面说到了JVM的常用的配置参数,其中就涉及了GC相关的知识,趁热打铁,我们今天就学习下GC的算法有哪些,种类又有哪些,让我们进一步的认识GC这个神奇的东西,帮助我们解决了C 一直挺头疼的内存回收 ...

  9. 将一个读取流转换成bitmap对象

     将一个读取流转换成bitmap对象:         BitmapFactory:可以将文件,读取流,字节数组转换成一个Bitmap对象.         Bitmap bitmap = Bitma ...

  10. Net6 DI源码分析Part3 CallSiteRuntimeResolver,CallSiteVisitor

    CallSiteRuntimeResolver CallSiteRuntimeResolver是实现了CallSiteVisitor之一. 提供的方法主要分三个部分 自有成员方法 Resolve提供服 ...