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