类的访问修饰符
修饰符有default  Public  Private  Internal  Protected  Protected internal等几种
现在从(类内部、子类、程序集内、程序集外)对他们的可访问范围进行了解:
using System;
namespace testclassmodifier
{    class Mod
    {    void defaultMethod()
        {Console.WriteLine("我是用default修饰的方法");}
        public void publicMethod()
        {Console.WriteLine("我是用public修饰的方法");}
        private void privateMethod()
        {Console.WriteLine("我是用private修饰的方法");}
        internal void internalMethod()
        {Console.WriteLine("我是用internal修饰的方法");}
        protected void protectedMethod()
        {Console.WriteLine("我是用protected修饰的方法");}
        protected internal void protectedInternalMethod()
        {Console.WriteLine("我是用protected internal修饰的方法");}
        static void Main(string[] args)
        {   Mod mod = new Mod();
            mod.defaultMethod();
            mod.publicMethod();
            mod.privateMethod();
            mod.internalMethod();
            mod.protectedMethod();
            mod.protectedInternalMethod();
        }    }}
运行结果:
我是用default修饰的方法
我是用public修饰的方法
我是用private修饰的方法
我是用internal修饰的方法
我是用protected修饰的方法
我是用protected internal修饰的方法
请按任意键继续. . .
可见这六个方法再同一个类中都可以被访问
现在我们把Main方法放到外面看看在同一个程序集(testclassmodifier)内是否可被访问
namespace testclassmodifier
{
    class Mod{ 个个方法同上 }
    class test
    {
        static void Main(string[] args)
        {
            Mod mod = new Mod();
            mod.defaultMethod();
            mod.publicMethod();
            mod.privateMethod();
            mod.internalMethod();
            mod.protectedMethod();
            mod.protectedInternalMethod();
        }
    }
}
编译结果出现错误
类的访问修饰符控制范围_修饰符
可见被default private protected修饰的方法在同一程序集是不可以访问的:但我们把些方法注释掉后运行结果:
我是用public修饰的方法
我是用internal修饰的方法
我是用protected internal修饰的方法
请按任意键继续. . .
可见:被public internal  protected interna修饰的方法在同一程序集是可以被访问的
现在看看在子类中代码做如下修改添加一个子类,在子类方法中调用父类方法
using System;
namespace testclassmodifier
{
    class Mod{    }
    class ModChild : Mod
    {
        public void RunMod()
        {
            defaultMethod();
            publicMethod();
            privateMethod();
            internalMethod();
            protectedMethod();
            protectedInternalMethod();
        }}
    class test
    {
        static void Main(string[] args)
        {
            ModChild modc = new ModChild();
            modc.RunMod(); 
        }}}
编译出错结果:
类的访问修饰符控制范围_类_02
可见:被default  private修饰的方法在子类中是不可以被访问的。当我们把些方法注释掉后运行结果:
我是用public修饰的方法
我是用internal修饰的方法
我是用protected修饰的方法
我是用protected internal修饰的方法
请按任意键继续. . .
可见:被其他方法修饰的方法在子类中是可以被访问的
现在看看在程序集外边 如何做:添加类库文件 将类class Mod生成dll文件注意命名空间要于相同 添加dll文件引用。代码如下:
编译结果:可见只有public修饰的方法可以被访问
类的访问修饰符控制范围_类_03
 
访问控制修饰符
类内部
子类
程序集内
程序集外
Default
可以
 
 
 
Public
可以
可以
可以
可以
Private
可以
 
 
 
Internal
可以
可以
可以
 
Protected
可以
可以
 
 
Protected internal
可以
可以
可以
 
我们会注意到Internal  Protected internal  一样有何区别?
当父类和子类在一个程序集的时候internal成员为可见的,当父类和子类不在一个程序集的时候子类不能访问父类成员,子类可以访问父类Protected internal成员
namespace testclassmodifier
{
    class Demo
    {
        class ModChild : Mod
        {
            public void RunMod()
            {
                //internalMethod();不可访问,不可见
                protectedInternalMethod();
            }
        }
        static void Main(string[] args)
        {
            ModChild modc = new ModChild();
            modc.RunMod();       
        }}}
 
使用Sealed修饰符的类不能在被继承
Partial修饰符可以把一个类放在不同的文件中