ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#中类的可访问修饰符

2019-06-29 08:52:46  阅读:247  来源: 互联网

标签:C# public 修饰符 ClassB ClassA 访问 new class 中类


访问修饰符  定义 备注 例子 测试总结
new 仅允许在嵌套类声明时使用,表明类中隐藏了由基类中继承而来的,与基类中同名的成员。 只能用于嵌套的类,表示对继承父类同名类型的隐藏。  private class ClassA { }
    }
    public class ClassB{
        public class ClassC{
            Form1.ClassA ca = new Form1.ClassA(); //错误
            ClassB cb = new ClassB(); //正确         
        }
    }   
可以在任何嵌套类声明中使用,但其父类的可访问性不可低于基类,否则报错:找不到类型或命名空间名称"A"(是否缺少using指令或程序集引用?)
public 表示不限制对该类的访问;可以被任意存取 命名空间或编译单元内的类只有public和internal两种修饰符。派生类为public类,其基类为protected,internal,private,abstract  internal class ClassA{ 
        //protected class ClassA{
            public class ClassB { }
        }      
    }
    public class ClassC{
        Form1.ClassA ca = new Form1.ClassA();
        Form1.ClassA.ClassB cb = new Form1.ClassA.ClassB();
    }
但是如果public类为嵌套中的类(如ClassB),且其外在类的可访问性为protected,private,abstract,sealed,则不能访问(因嵌套类作为外在类的内部成员,在访问类中不能访问到),但如果外在类的可访问性为internal,则可以访问(因嵌套类作为外在类的内部成员,在访问类中可以访问到)。
protected 表示只能从所在类和所在类派生的子类进行访问 只可以被本类和其继承子类存取 protected class ClassA {
            protected class ClassB { }
            ClassB cb = new ClassB(); //正确,在ClassB所在类内访问
        }
        //ClassB cb = new ClassB(); //错误,不在ClassB所在类内访问 
    } 
    public class ClassC:Form1 {
        ClassA ca = new ClassA(); //正确,在ClassA所在类的继承子类中访问
        //ClassA.ClassB cb = new ClassA.ClassB(); //错误,不在ClassB所在类的继承子类中访问
    }
限定的是只有在同一程序集中才可以访问,可以跨程序集
internal 只有其所在类才能访问 默认为internal;只可以被本组合体(Assembly)内所有的类存取,组合体是C#语言中类被组合后的逻辑单位和物理单位,其编译后的文件扩展名往往是“.DLL”或“.EXE”。 internal class ClassA{
            internal class ClassB { }
        }
        //} //错误 访问类不在internal所在类Form1中
        public class ClassC{
            ClassA ca = new ClassA();
            ClassA.ClassB cb = new ClassA.ClassB();
        }
    } //正确
限定得是只有在同一个程序集中才可以访问,可以跨类。在namespace空间下类默认的修饰符为internal,但当嵌套类作为类的内部成员,则嵌套类默认的修饰符为private
private 只有对包.net中的应用程序或库才能访问 只可以被本类所存取。包是由.class文件组成的一个集合,.class文件是可以用java解释器编译执行的文件,它也是由java的源文件即.java经编译而生成的。  private class ClassA {
            private class ClassB { }
            }
        private class ClassC{
            ClassA ca = new ClassA(); //正确
            //ClassA.ClassB cb = new ClassA.ClassB(); //错误
        }
只能被和private类在同一所在类的类访问
abstract 抽象类,表示该类只能作为父类被用于继承,而不能进行对象实例化。抽象类可以包含抽象的成员,但这并非必须。 Abstract不能和new同时用  abstract class A {
        public abstract void F();
    }
    abstract class B : A{
        public void G() { }
    }
    class C : B{
        public override void F(){ }
    }
类继承时,如果基类的可访问性比派生类的可访问性低,则不可以继承(报错),例子:        private class C { }
        protected class D :C {}
sealed 密封类,不允许被继承。同时对一个类作abstract和sealed的修饰是没有意义的,也是被禁止的。 密封类可以阻止其他程序员在无意中继承该类,而且密封类可以起到运行时优化的效果。实际上,密封类中不可能有派生类,如果密封类实例中存在虚成员函数,改成员函数可以转化为非虚的,函数修饰符virtual不再生效。 sealed class A {}
 class C : A {}
类的修饰符的访问范围是:private<protected/internal<internal protected<public

转载于:https://www.cnblogs.com/zsli-2008-20/archive/2007/03/28/691614.html

标签:C#,public,修饰符,ClassB,ClassA,访问,new,class,中类
来源: https://blog.csdn.net/weixin_33828101/article/details/94112844

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有