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