1.類中成員的訪問修飾符
方位修飾符就是確定該成員能夠訪問(使用)的區域。C#中常用的有如下修飾符:pubic(公有)、private(私有)、internal(內聯)、protected(受保護)。舉例說明各個修飾符的限制區域。
代碼如下:
class TestClass
{
public int a = 0;
private int b = 0;
protected int c = 0;
pulic static int d=0;
}
TestClass類中變量a是公有類型,可以在類外方位,即類實例化後可以使用a;變量b只能在類內訪問,即類內部的函數可以使用b;變量c則是TestClass繼承類可以使用。
代碼如下:
class B
{
private void st()
{
TestClass tec = new TestClass();
int aa = tec.a; //right
int bb = tec.b; //wrong
int cc = tec.c //wrong
}
TestClass 實例化對象tec,tec可以訪問a但不能訪問b、c。那麼什麼情況下可以訪問b、c呢?
代碼如下:
class C:TestClass
{
private void st()
{
TestClass tec = new TestClass();
C bo = new C();
int aa = tec.a;
int bb = tec.b;//wrong
int cc = tec.c;//wrong
int tt = bo.c;
}
}
先說c。c是受保護類型,其繼承類C可以訪問。是類B實例化對象仍然不可以訪問。但是B內部可以訪問c。如下面所示,類內訪問類內無限制。
代碼如下:
class TestClass
{
public int a = 0;
private int b = 0;
protected int c = 0;
pulic static int d=0;
private void os()
{
int a1 = a;
int a2 = b;
int a3 = c;
}
}
B繼承之後,c就變為private。也就說B的繼承類無法訪問c;如下所示,D中無法訪問c。
代碼如下:
class D : B
{
private void st()
{
B bo = new B();
int dd = bo.c;//wrong訪問受限制
}
}
static修飾符表明該字段或方法是類所有,不是某個具體對象的。TestClass類不同實例化時a、b、c的值不同,但d是相同的。如果說a、b、c相當於每個人在哪個省,那麼d表明大家都在中國。
代碼如下:
class B:TestClass
{
TestClass tec = new TestClass();
int bb = tec.a;//wrong 錯誤原因是因為字段的初始值引用了非靜態字段
int cc = TestClass.d;
private void st()
{
B bo = new B();
int aa = tec.a;
int tt = bo.c;
}
}
小結:
puclic修飾:類內,類外皆可;private:內部;protect:類內即其派生類。