c#入门经典笔记第十章
一、如何定義類成員
1、成員定義
包含字段、方法和屬性可以使用public、private(默認(rèn))、internal和protected關(guān)鍵字定義。也可以使用static,表示它們是類的靜態(tài)成員,而不是對象實(shí)例的成員。
(1)定義字段。公共字段以PascalCasing形式命名,私有字段通常用camelCasing形式。字段也可以使用readonly關(guān)鍵字。表示這個字段只能在執(zhí)行構(gòu)造函數(shù)的過程中賦值,或由初始化賦值語句賦值。可以使用static,靜態(tài)字段必須通過定義它們的類來訪問,而不是通過這個類的對象實(shí)例來訪問。可以用關(guān)鍵字const創(chuàng)建一個常量,const成員也是靜態(tài)的,不需要也不能用static修飾符。
(2)定義方法?。使用標(biāo)準(zhǔn)函數(shù)格式、可訪問性和可選的static修飾發(fā)來聲明。如果使用了static關(guān)鍵字,就只能通過類來訪問,不能通過對象實(shí)例來訪問。也可以在方法定義中使用下述關(guān)鍵字:
virtual:方法可以重寫
abstract:方法必須在非抽象的派生類中重寫(只用于抽象類中)
override:方法重寫了一個基類方法(如果方法被重寫,就必須使用該關(guān)鍵字)
extern:方法定義放在其他地方
如果使用了override,也可以使用sealed指定在派生類中不能對這個方法作進(jìn)一步的修改。
(3)定義屬性。屬性擁有兩個類似于函數(shù)的快,一個快用于獲取屬性值,一個用于設(shè)置屬性的值。這兩個快也稱為訪問器,分別用get和set關(guān)鍵字來定義。可以用于控制對屬性的訪問級別。兩個快可以單獨(dú)存在。(當(dāng)然這僅限于外部代碼,因?yàn)轭愔械牡钠渌a可以訪問這些大麥快能訪問的數(shù)據(jù))
屬性的基本結(jié)構(gòu)包括標(biāo)準(zhǔn)的可訪問修飾符,后跟類名、屬性名和set(get)塊
get塊必須有一個屬性類型的返回值,簡單的屬性一般與私有字段相關(guān)聯(lián),以控制對這個字段的訪問。
set函數(shù)以類似的方式把一個值賦給字段。這里用關(guān)鍵字value表示用戶提供的屬性值。訪問器 可以有自己的訪問性,訪問器的可訪問想不能高于它所屬的屬性。
private int myInt;
//Property
public int MyIntProp
{
get
{
return myInt;
}
public set
{
myInt = value;
}
}
value等于類型與屬性相同的一個值。set中可以設(shè)計更多的控制。
二、如何使用類圖添加成員
三、如何控制類成員的繼承
1、隱藏基類方法。
當(dāng)從基類繼承一個(非抽象)成員時,也就繼承了其實(shí)現(xiàn)代碼,如果繼承的成員是虛擬的,就可以用override關(guān)鍵字重寫這段實(shí)現(xiàn)代碼。無論繼承的成員是否為虛擬的,都可以隱藏這些實(shí)現(xiàn)代碼。當(dāng)繼承的公共成員不像預(yù)期的那樣工作時,就可以隱藏它。可以使用new關(guān)鍵字顯示的隱藏。
public class MyBaseClass
{
public void Dosomething()
{
}
}
public class MyDerivedClass:MyBaseClass
{
new public void DoSomething()
{}
}
?應(yīng)注意隱藏基類成員和重寫它們的區(qū)別。重寫方法將替換基類中的實(shí)現(xiàn)代碼
2、調(diào)用重寫或隱藏的基類的方法
無論是重寫成員還是隱藏成員,都可以在派生類的內(nèi)部訪問基類成員。如下兩種情況:
(1)要對派生類的用戶隱藏繼承的公共成員,但仍能在類中訪問其功能
(2)要給繼承的虛擬成員添加實(shí)現(xiàn)代碼,而不是簡單的用重寫的新執(zhí)行代碼替換它。
為此,可以使用base關(guān)鍵字,它表示在派生類中包含基類的實(shí)現(xiàn)代碼(在控制構(gòu)造函數(shù)時,其用法是類似的)
public class MyBaseClass
{
public virtual void DoSomething(){//...}
}
public class MyDerivedClass:MyBaseClass
{
public override void DoSomething()
{
base.DoSomething();
}
}
這段代碼執(zhí)行包含在MyBaseClass中的DoSomething()版本,MyBaseClass是MyDerivedClass的基類,而DoSomething()版本包含在MyDerivedClass中,因?yàn)閎ase使用的是對象實(shí)例所以在靜態(tài)成員中使用它會產(chǎn)生錯誤。
this關(guān)鍵字與base一樣,可以用在類成員的內(nèi)部,且該關(guān)鍵字也引用對象實(shí)例。只是this引用的是當(dāng)前的對象實(shí)例(即不能在靜態(tài)成員中使用this關(guān)鍵字,因?yàn)殪o態(tài)成員不是對象實(shí)例的一部分)
this關(guān)鍵字最常用的功能是把當(dāng)前對象實(shí)例的引用傳遞給一個方法,如下:
public void doSomething()
{
MyTargetClass myObj = new MyTargetClass();
myObj.DoSomethingWith(this);
}
其中,被實(shí)例化的MyTargetClass實(shí)例有一個DoSomethingWith()方法,該方法帶有一個參數(shù),其類型與包含上述方法的類兼容,這個參數(shù)類型可以是類的類型、由這個類繼承的類類型,或者由這個類或System.Object實(shí)現(xiàn)的一個接口。
this關(guān)鍵字的另一個常見的用法是限定本地類型的成員,例:
public class MyClass
{
private int someData;
public int SomeData
{
get
{
return this.someData;
}
}
}
這個語法可以用于任意成員類型,因?yàn)榭梢砸谎劭闯鲆玫氖浅蓡T,而不是局部變量。
四、如何定義嵌套的類
可以在類中定義類,可以使用各種訪問修飾符,也可以使用new關(guān)鍵字隱藏繼承與基類的類型定義。
五、如何實(shí)現(xiàn)接口
1、接口定義的方式與類相似
interface IMyInterface{}
接口成員的定義與類成員定義相似,區(qū)別是:
(1)所有的接口成員必須是公共的
(2)接口成員不能包含代碼體
(3)接口不能定義字段成員
(4)不能用關(guān)鍵字static、virtual、abstract或sealed定義
(5)類型定義成員是禁止的
如果要隱藏繼承了基接口的成員,可以用關(guān)鍵字new來定義它們,如
interface IMyInterface
{void DoSomething();}
interface IMyDerivedInterface : IMyInterface
{new void DoSomething();}
其執(zhí)行方式與隱藏繼承的類成員的方式一樣。
在接口中定義的屬性可以定義訪問快get和set中的哪一個能用于該屬性。
interface IMyInterface
{int MyIntArray{get;set;}}
接口可以定義為類的成員,但不能定義為其他接口的成員,因?yàn)榻涌诓荒馨愋投x。
2、在類中實(shí)現(xiàn)接口
實(shí)現(xiàn)接口的類必須包含該接口所有成員的實(shí)現(xiàn)代碼,且必須匹配指定的簽名(包括匹配指定的get塊和set塊),并且必須是公共的。可以使用virtual和abstract來實(shí)現(xiàn)接口,但不能用static和const,還可以在基類上實(shí)現(xiàn)接口成員。
3、顯示實(shí)現(xiàn)接口成員
如下代碼
public class MyClass : IMyInterface
{
void IMyInterface.DoSomething(){}
public void DoSomethingElse(){}
}
后者隱式地實(shí)現(xiàn)接口IMyInterface的方法DoSomethingElse(),可以通過接口來訪問也可以通過類來訪問。以下兩種方式都可以。
① MyClass myObject = new MyClass();
myObj.DoSomething();
②MyClass myObj = new MyClass();
IMyInterface myInt = myObj;
myInt.DoSomething
而DoSomething是顯示實(shí)現(xiàn)的,只能通過第二種方式來訪問。
4、用非公共的可訪問性添加屬性存取器
如果在定義屬性的接口中只包含set或get塊,就可以給類中的屬性天劍get或set塊,但是只有所添加的存取器的可訪問修飾符比接口中定義的存取器的可訪問修飾符更嚴(yán)格時,才可以。因?yàn)榻涌诙x的存取器是公共的,也就是說,只能添加非公共的存取器。
六、如何使用部分類定義
1、在代碼塊中使用#region Fields和#endregion可以展開折疊代碼區(qū),方便閱讀。但這種代碼可能難以理解,因此可以是使用部分類定義(partial class definition)。就是使用部分類定義,把類的定義放在多個文件中,如可以把字段、屬性和構(gòu)造函數(shù)放在一個文件中,而把方法放在另一個文件中。為此,只需在每個包含部分類定義的文件中對類使用partial關(guān)鍵字即可。partial關(guān)鍵字必須出現(xiàn)在包含定義部分的每個文件的與此相同的位置。引用于部分類的接口也會應(yīng)用于整個類。可以在一個或多個類定義中包含基類,但必須是同一個基類。
2、部分類可以定義部分方法,部分方法在部分類中定義,但沒有方法體,在另個部分類中包含實(shí)現(xiàn)代碼。在來著兩個部分類中,都要使用partial關(guān)鍵字。部分方法可以是靜態(tài)的,但它們總是私有的,且不能有返回值。它們使用的任何參數(shù)都不能是out參數(shù),可以死ref參數(shù),部分方法不能使用virtual、abstract、override、new、sealed和extern修飾符。
七、如何使用Call Hierarchy窗口
?
轉(zhuǎn)載于:https://www.cnblogs.com/LittleWhiteJunior/p/3348673.html
總結(jié)
以上是生活随笔為你收集整理的c#入门经典笔记第十章的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Rsync 3.1.0 发布,文件同步工
- 下一篇: c# out原理 ref_移植贪吃蛇——