C#中的OOP相关概念
一:類
?
?? 1. 類的定義:
????????? 類是對一組具有相同屬性和行為的對象的抽象;
?? 2. 類的構成:
???????? 1) 聲明類:類的默認修飾符為internal
????????????????? public/internal? clss 類名
??? {
??? }
???????? 2) 構造函數:
?????????????? 帶參數的構造函數:
?????????????? 私有構造函數:
?????????????? 靜態構造函數;
?????????????????? 用于初始化任何靜態數據,或用于執行僅需執行一次的特定操作。在創建第一個實例或引用任何靜態成員之前,將自動調?????????????????? 用靜態構造函數。
?????????????????? class Chen
?????????????????? {
????????????????????? static Chen()?? --------->1.沒有修飾符,沒有參數
?????????????????????? {???????????????????????? 2.創建實例或引用靜態成員之前,自動調用
?????????????????????? }???????????????????????? 3.無法直接調用
????????????????????? Chen()
????????????????????? {
????????????????????? }
?????????????????? }
???????? 3) 析構函數:
???????? 4) 構建成員:
????????????????? 成員變量:
????????????????? 方法:
????????????????? 事件:
????????????????? 委托:
????????????????? 索引器:
????????????????? 其他類:
二:接口:
????? interface IChen
????? {
???????? print();
????? }
????? class A : IChen
????? {
???????? print方法實現;
????? }
????? class B: IChen
????? {
???????? print方法實現;
????? }
????? 在Main窗體中,點擊不同按鈕,要調用不同類的print方法;
????? 創建接口變量:IChen Iprint;
????? if(btn1)
????? {
????????? Iprint = objA;? //如果是這樣,將該接口變量指向該對象實例
????? }
????? else if (btn2)
????? {
????????? Iprint = objB;??? //如果是這樣,將該接口變量指向該對象實例
????? }
????? Main窗體中的print方法:
????? if(this.Iprint!=null)
????? {
? this.Iprint.print();?? //調用接口的方法 ,? 因為此時該接口變量已經動態指向了不同的對象
????? }
?
三:類和接口:
???????????? 接口?????????????????????????????????????????????????????????????????? 類
?
?1.接口本身:不能直接實例化(引用實現該接口的類的對象)???????????????????????? 直接實例化
???????????? 多繼承,一個接口可以繼承自多個接口???????????????????????????????? 單繼承,一個類只可以繼承自一個基類
???????????? 不提供實現 它有類來實現??????????????????????????????????????????? 實現類要實現接口的每個方面
?2.接口成員:可以包括方法 事件 索引器 屬性????????????????????????????????????? 同
???????????? 接口成員要全部是公共訪問級別?????????????????????????????????????? 多種訪問級別
???????????? 不能在后續版本中添加新成員
接口和抽象類的選擇:
?? 同:
????? 都支持協定和實現的分離;都是實現抽象機制的方法;
????? 不能進行實例化
?? 異:
????? 接口不能提供成員的實現細節;抽象類可以;
????? 接口不能在后續添加新成員;抽象類可以添加新成員實現更多功能;
??????
如何選擇:
?? 1) 優先選擇抽象類,因為它可以在后續添加新成員可;
?? 2) 如果類要實現多個協定 也就是多繼承,定義接口;
?? 3) 值類型要求多態行為,定義接口;
?? 4) 協定適合于多種類型,定義接口;
?
四:類型設計:
?? 1. 類
?????? 1) 抽象類:
??????????? 不要在抽象類中定義公共的public 和受保護的內部protected internal構造函數;應定義成protected或private;
?????? 2) 靜態類:
?????? 4) 抽象類和接口:如上
?????? 5) 類和結構:如下
?? 2. 結構
??????? 設計準則:邏輯上表示單個值;實例大小小于16字節;不可變;不別頻繁裝箱;
?? 3. 接口
????????? 避免定義空接口(標記接口)
?? 4. 枚舉
??
?? 5. 委托:
委托是一種對象類型,表示對方法的引用而不是對方法名稱的引用。使用委托的意義在于在運行時動態的調用方法;
調用或執行一個委托,將執行該委托所引用的方法;
委托要求它所引用的方法和它有同樣的返回值和參數類型;
?
public class MyDelegate
{
// 1.定義委托
public delegate int Call(int num1,int num2);
class Math
{
?? // 2. 方法的實現,它和所定義的委托有同樣的返回值,以及相同類型的參數
?? public int add(int a1,int a2)
?? {
????? return a1+a2;
?? }
?? public int divide(int b1,int b2)
?? {
????? return b1-b2;
?? }
}
class TestDelegate
{
?? static void Main()
?? {
????? int result;
????? Call objCall;? 3. //定義一個委托類型的空對象
????? Math objMath= new Math();
????
????? objCall = new Call(objMath.add);? //4. 實例化該委托對象 使其引用某個具體的方法,將方法做為參數傳遞;
????? result=objCall(10,20);? //5.調用委托,實際上是使用委托對方法進行實例化,
????????????????????????????? //這里不是調用委托的實現,因為他沒有實現,調用的是與委托關聯的方法的實現;
????? Console.WriteLine("the result is :",result);
?? }
}
}
?? 5. 嵌套類型:
???????? 嵌套類型可以訪問聲明類型中的所有其他成員
??
?
封裝:
????? 封裝最大的益處就是,當一個實體放生變動,不波及其他實體;
?????
繼承:
? 方法重寫:
? base 關鍵字:
?? 用于從子類中訪問基類成員; 如java中的super
?? 使用base關鍵字只能訪問基類的構造函數 實例方法或實例屬性 ,不能訪問基類的靜態方法。
? override 關鍵字:
??? 用于重寫基類中的virtual abstract 方法;但重寫的方法和基類中的方法有同樣的訪問級別
????
? new關鍵字:
?? 用于隱藏基類方法;
?? 1.? 使用 new 關鍵字時,調用的是新的類成員而不是已被替換的基類成員。這些基類成員稱為隱藏成員。
?? 2.? 如果將派生類的實例強制轉換為基類的實例,就仍然可以調用隱藏類成員
?
? virtual關鍵字:
??? 將方法定義為多態,也就是對可修改的方法的聲明;在子類中使用override關鍵字實現;
? abstract關鍵字:
??? 將方法定義為抽象,由子類具體實現;
? override 和 new 對方法的版本控制:
??? 當子類和基類具有相同的方法名稱:
?????? 首先基類中的方法要有virtual關鍵字;
?????? 如果子類方法不帶這兩個方法:會默認添加new 子類對象調用的是基類的方法;
?????? 如果子類方法帶override:則子類對象調用該方法;
?????? 如果子類方法帶new:則會子類對象調用基類中的方法;
?????? 如果子類方法中使用base:和使用new是同樣效果;
???????? public void Fun()
??????? {
??????????? base.Fun();
??????????? //Console.WriteLine("這是子類B");
??????? }
多態:
???? 一個類可以用作多種類型:可以用作它自己的類型、任何基類型,或者在實現接口時用作任何接口類型。這稱為多態性。C# 中的每種類型都是多態的.
?? 方法重載:
??????? 在同一類型中定義多個具有相同名稱,不同參數列表(參數個數不同,參數的順序不同),返回值可同可不同的方法;
?
?
?
?轉載于:https://www.cnblogs.com/lf_software/archive/2009/03/03/1402364.html
總結
以上是生活随笔為你收集整理的C#中的OOP相关概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有关css和js针对不同浏览器兼容的问题
- 下一篇: [导入]silverlight 2.0希