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. 搭建服务器之DNS

    DNS服务器,实用软件为bind,服务守护进程为named,一下记录一下自己的搭建过程: 1.yum install bind*  其中包括bind本身软件,测试dns的一些工具dig,nslooku ...

  2. golang中自定义实现0当做除数的错误异常处理接口

    package main import "fmt" type ZeroDivisor struct { // 定义一个0当做除数的结构体 divisor int // 被除数 di ...

  3. python-pip使用出现的问题

    总结在pip过程中出现的问题 1.pip 安装指定数据源 默认情况下 pip 使用的是国外的镜像,在下载的时候速度非常慢 可以直接在 pip 命令中使用 -i 参数来指定镜像地址 例如:pip ins ...

  4. centos7无法访问虚拟机web服务

    第一种: 先看下防火墙状态:firewall-cmd --state 关闭防火墙再试试:systemctl stop firewalld.service 第二种,不想关闭防火墙 放开http服务 fi ...

  5. IDEA出现Cannot resolve symbol “xxx“(无法解析符号)的解决办法

    1,File->Invalidate Caches/Restart 清除缓存并重启 idea 2,检查pom文件中的依赖关系是否正确 3,maven -> Reimport 4,打开pro ...

  6. IP:网络上的击鼓传花

    链接,而不是直达 在之前<听说你很懂 DNS?>中我们分析过用户在浏览器里面输入 www.baidu.com 后,浏览器如何通过 DNS 解析拿到 IP 地址,然后请求该 IP 地址获取网 ...

  7. 人口信息普查系统-JavaWeb-二

    上次发表了人口普查系统的题目要求,今天和大家分享一下我的技术方案. 技术上用到的是html+jsp+JavaBean+servlet+JavaScript 其实现在的前端页面主流还是html,它可以实 ...

  8. Matplotlib 3.0 秘籍·翻译完成

    原文:Matplotlib 3.0 Cookbook 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. 在线阅读 ApacheCN 面试求职交 ...

  9. storyboard文件的认识

    - 作用:描述软件界面 - 程序启动的简单过程     - 程序一启动,就会加载`Main.storyboard`文件     - 会创建箭头所指的控制器,并且显示控制器所管理的软件界面 - 配置程序 ...

  10. java file已存在,新建流写入此文件是否会覆盖原本file信息

    java中建立文件输出流,当文件不存在时会新建一个文件:如果有同名文件,自动覆盖.不存在时自动建立.FileOutputStream的默认构造方法是直接覆盖掉原来的文件,而FileOutputStre ...