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

  • 相关阅读:
    HDU 1009 FatMouse' Trade
    HDU 2602 (简单的01背包) Bone Collector
    LA 3902 Network
    HDU 4513 吉哥系列故事——完美队形II
    LA 4794 Sharing Chocolate
    POJ (Manacher) Palindrome
    HDU 3294 (Manacher) Girls' research
    HDU 3068 (Manacher) 最长回文
    Tyvj 1085 派对
    Tyvj 1030 乳草的入侵
  • 原文地址:https://www.cnblogs.com/dst5650/p/6813364.html
Copyright © 2011-2022 走看看