首页 > 编程语言 >C#学习笔记 -- 成员访问修饰符

C#学习笔记 -- 成员访问修饰符

时间:2023-05-22 19:33:20浏览次数:44  
标签:访问 C# 成员 修饰符 程序 -- internal 继承 MyClass

成员访问修饰符

  • 所有显式声明在类声明中的成员都是互相可见的, 无论给他们声明访问等级

  • 继承的成员不在类声明中显式声明, 所以, 继承成员对派生类的成员是可见的, 也可以是不可见的, 基类私有派生类看不见

  • 访问级别

    • public

    • private

    • protected

    • internal

    • protected internal

  • 必须对每个成员指定成员访问等级, 不指定默认为private

  • 成员的可访问性不能高于他所在的类

(0)访问成员的区域

类MyClass被声明为public, 他的成员的可见性依赖于各个成员的修饰符

public class MyClass
{
    public int Member1;
    private int Member2;
    protected int Member3;
    internal int Member4;
    protected internal int Member5;
}

另一个类能否访问MyClass成员取决于该类的两个特征

  • 是否派生自MyClass

  • 是否与MyClass类在同一个程序集

两个特征征化分出4个集合

  • 在同一程序集且继承自MyClass(右下)

  • 在同一程序集但不继承MyClass(左下)

  • 在不同的程序集且继承MyClass(右上)

  • 在不同的程序集且不继承MyClass(左上)

(1)public公有成员

Y / N 不能继承MyClass的类 继承MyClass的类
所有其他程序集中的类 Y Y
相同程序集中的类 Y Y

(2)private私有成员

  • 只能被他自己的类成员访问

  • private成员可以被嵌套在他内部的类成员访问

Y / N 不能继承MyClass的类 继承MyClass的类
所有其他程序集中的类 N N
相同程序集中的类 N N

(3)protected受保护的成员

  • 他自己的类成员

  • 任何程序集中, 他的派生类成员

  • 嵌套在他内部的类

Y / N 不能继承MyClass的类 继承MyClass的类
所有其他程序集中的类 N Y
相同程序集中的类 N Y

(4)internal内部成员

  • 所在同一程序集内部所有类, 包括所在同一程序集的派生类

Y / N 不能继承MyClass的类 继承MyClass的类
所有其他程序集中的类 N N
相同程序集中的类 Y Y

(5)protected internal受保护的内部成员

  • 所在同一程序集内部所有类, 包括所在同一程序集的派生类

  • 不在同一程序集的派生类

Y / N 不能继承MyClass的类 继承MyClass的类
所有其他程序集中的类 N Y
相同程序集中的类 Y Y

(6)小结

修饰符 含义
private 只在类的内部可访问
internal 对该程序集内所有类可访问
protected 对其所有派生类可访问
protected internal 对其所有派生类或在该程序集内部所有类
public 对任何类可访问

标签:访问,C#,成员,修饰符,程序,--,internal,继承,MyClass
From: https://www.cnblogs.com/phonk/p/17421533.html

相关文章

  • 档案信息化建设,这份法律法规清单,请收好
    为了推进档案管理的数字化落地,国家颁布了一系列法律法规和标准规范,当企业在进行档案信息化建设时,应遵循相应的法律法规,保障信息安全、规范档案管理、保障档案使用和保存。法律法规2020年6月20日第十三届全国人民代表大会常务委员会第十九次会议修订《中华人民共和国档案法》专门增......
  • Xcode7 无证书真机调试 "Could not launch 'test' process launch failed: Security"
    iOS8,iOS7真机测试的时候遇到这样的提示,烦请各位兄弟姐妹帮助解决,万分感谢!运行程序后提示如下......
  • SVN commit:remains in tree-conflict错误的解决办法
    昨天在提交一个新类包的时候,出错了,重新提交了几次也不行.Abortingcommit:‘C:/workspace/MyWork/src/org’remainsinconflict由于是新第一次提交,感觉上应该是没有问题的.最后上网找了一下,发现了解决办法.Eclipse中的解决办法右击工程目录–>team–>ShowTreeConflict......
  • iOS AES 256加密
    #import<Foundation/Foundation.h>@classNSString;@interfaceNSData(Encryption)-(NSData*)AES256EncryptWithKey:(NSString*)key;//加密-(NSData*)AES256DecryptWithKey:(NSString*)key;//解密@end#import"NSData+AES.h"#import&......
  • Unzipping Files In iOS Using ZipArchive
    Inthistutorial,IamgoingtodemonstratehowyoucanzipandunzipfilesfromwithinyouriOSapplications.WewillbeusingathirdpartylibrarycalledZipArchivetoachievethis.Whilethereareacouplesolutionsouttheretozipandunzipfiles,......
  • 01、SECS的基本概念
    最近做的项目跟半导体设备相关,需要学习SECS相关的内容,把自己的学习记录分享出来,如有不足甚至错误的地方,请不吝赐教,十分感谢!文章内容基本都是SECS协议的内容和参考的资料,只不过是加了自己的理解部分,特此记录下。1、SECS的定义SECS的全称是:SEMIEquipmentCommunicationStanda......
  • 最大公约数
    求任意两个正整数的最大公约数(GCD)。通过从1穷举求最大公约数:#include<iostream>usingnamespacestd;intmain(){ intm,n,a; cin>>m>>n; if(m<n) { inttemp=m; m=n; n=temp; } for(inti=1;i<=n;i++) { if(m%i==0&&n%i==0) { a=i; } } cout<<m&......
  • 编程打卡:面向对象程序设计
    importosimportsqlite3#Createadatabaseconnectionconn=sqlite3.connect('todo.db')#Createatodotablecur=conn.cursor()cur.execute('''CREATETABLEtodo(idINTEGERPRIMARYKEYAUTOINCREMENT,titleTEXTNOTNUL......
  • python pip超时解决方案
    目录pythonpip超时解决方案使用-i选项指定pip源使用--default-timeout选项增加超时时间增加重试次数pythonpip超时解决方案当执行pip3install命令时出现超时错误,通常是由于网络连接不稳定或网络速度较慢引起的。为了解决这个问题,你可以尝试以下方法:使用-i选项指定......
  • 扩展可能性:发挥React Native与小程序集成的优势
    ReactNative是一个强大的前端跨端框架,可以帮助开发者高效地构建移动应用程序,并充分利用跨平台开发的优势,同时提供接近原生应用程序的性能和用户体验。它具有许多技术上的优势:跨平台开发:使用ReactNative,您可以使用相同的代码库构建同时运行在iOS和Android平台上的应用程序。......