類的訪問修飾符控制範圍

類的訪問修飾符
修飾符有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(); 

        }}}

編譯出錯結果:

可見:被default  private修飾的方法在子類中是不可以被訪問的。當我們把些方法註釋掉後運行結果:
我是用public修飾的方法

我是用internal修飾的方法

我是用protected修飾的方法

我是用protected internal修飾的方法

請按任意鍵繼續. . .

可見:被其他方法修飾的方法在子類中是可以被訪問的

現在看看在程序集外邊 如何做:添加類庫文件 將類class Mod生成dll文件注意命名空間要於相同 添加dll文件引用。代碼如下:
編譯結果:可見只有public修飾的方法可以被訪問
 
訪問控制修飾符

類內部

子類

程序集內

程序集外

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修飾符可以把一個類放在不同的文件中

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章