zoukankan      html  css  js  c++  java
  • C#访问修饰符学习整理

    C#访问修饰符


    分类

    C#访问修饰符一共有五种,分别为private, internal, protected, protected internal, public
    它们都可以用来修饰类中的成员,如字段,属性,方法,事件等。对于修饰class,enum,struct,嵌套类,及其各自默认修饰符的情况,我们稍后讨论,先来看类内部成员的访问范围。

    访问范围

    首先贴出MSDN上关于访问修饰符的访问范围限制说明。

    上图中的五种访问修饰符修饰的是类的成员,假设类名为TestClass,并且这5种修饰符分别在类TestClass中以下修饰了5种方法:

    class TestClass
        {
            private void Foo_Private()
            {
                
            }
            internal void Foo_Internal()
            {
    
            }
            protected void Foo_Protected()
            {
                
            }
            protected internal void Foo_ProtectedInternal()
            {
                
            }
            public void Foo_Public()
            {
                
            }
        }
    

    那么访问修饰符的解释如下:

    • public : 访问无限制。
    • protected : 访问限制为包含此成员的类TestClass内部,或者TestClass派生类内部。
    • internal : 访问限制为当前程序集内。
    • protected internal : 访问限制为当前程序集,或者TestClass的派生类。
    • private : 访问限制为TestClass内部

    五种方法的访问测试结果如下:

    可以看出,private的访问范围最小,访问范围只限于类的内部。public的访问范围最大,无限制。internal的访问范围限制为当前程序集,在当前类内部,派生类内部,程序集内其它类内部都可以访问。protected的访问范围是当前类内部和派生类内部,无论是当前程序集还是其它程序集,只要是它的派生类,那么就可以访问。protected internal是protected和internal的并集,它们是或的关系,即符合protected或者internal的访问范围,都是protected internal的访问范围。

    class, enum, struct, interface修饰符

    在命名空间下,可以用于修饰class, enum, struct, interface的修饰符只有internalpublic,指定该结构的访问范围是程序集内,还是无限制。

    其余的修饰符private, protected, protected internal不能用来修饰命名空间下的class, enum, struct, interface。为什么这样呢?举个例子,使用private修饰class之后,这个类对于程序集内其它类不可见,那么这个类就没有办法使用,也就毫无意义了。

    class, enum, struct, interface默认修饰符

    在命名空间下,class, enum, struct, interface的默认修饰符为internal,即:

    internal class TestClass
    {
        
    }
    

    class TestClass
    {
        
    }
    

    这两种定义等价。

    class, enum, struct, interface内部成员默认修饰符

    先贴MSDN上关于默认修饰符的说明:

    其中,enum和interface内部成员默认访问修饰符为public,而class和struct内部成员的默认访问修饰符为private。在class中,五种访问修饰符都可以使用,在struct中,由于不存在继承关系,protected和protected internal都不能使用。

    嵌套类修饰符

    嵌套类可以看做是类的内部成员,因此,其访问修饰符和类的字段,属性,方法一样。来看一段代码示例:

    class TestClass1
        {
            public class TestClass2
            {
    
            }
            internal class TestClass3
            {
                
            }
            protected class TestClass4
            {
                
            }
            protected internal class TestClass5
            {
                
            }
            private class TestClass6
            {
                
            }
            class TestClass7
            {
                
            }
        }
    

    这样定义嵌套类没有任何问题,相当于定义了类的普通成员。嵌套类的默认修饰符为private

  • 相关阅读:
    java数据类型转换
    复习Java基础
    最完整的台达PLC培训教程(沈阳工大)学习笔记1
    6.3.4 方法引用
    6.3.3函数式接口
    6.3 lambda 表达式
    java 核心技术卷一笔记 6 .2.3 接口 lambda 表达式 内部类
    java 核心技术卷一笔记 6 .2接口 lambda 表达式 内部类
    java 核心技术卷一笔记 6 .1.接口 lambda 表达式 内部类
    软件开发需求风险分析
  • 原文地址:https://www.cnblogs.com/dst5650/p/6813364.html
Copyright © 2011-2022 走看看