日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#中的OOP相关概念

發(fā)布時間:2025/7/25 C# 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#中的OOP相关概念 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


一:類
?
?? 1. 類的定義:
????????? 類是對一組具有相同屬性和行為的對象的抽象;
?? 2. 類的構(gòu)成:
???????? 1) 聲明類:類的默認(rèn)修飾符為internal
????????????????? public/internal? clss 類名
??? {
??? }

???????? 2) 構(gòu)造函數(shù):
?????????????? 帶參數(shù)的構(gòu)造函數(shù):
?????????????? 私有構(gòu)造函數(shù):
?????????????? 靜態(tài)構(gòu)造函數(shù);
?????????????????? 用于初始化任何靜態(tài)數(shù)據(jù),或用于執(zhí)行僅需執(zhí)行一次的特定操作。在創(chuàng)建第一個實例或引用任何靜態(tài)成員之前,將自動調(diào)?????????????????? 用靜態(tài)構(gòu)造函數(shù)。

?????????????????? class Chen
?????????????????? {
????????????????????? static Chen()?? --------->1.沒有修飾符,沒有參數(shù)
?????????????????????? {???????????????????????? 2.創(chuàng)建實例或引用靜態(tài)成員之前,自動調(diào)用
?????????????????????? }???????????????????????? 3.無法直接調(diào)用
????????????????????? Chen()
????????????????????? {
????????????????????? }
?????????????????? }


???????? 3) 析構(gòu)函數(shù):


???????? 4) 構(gòu)建成員:
????????????????? 成員變量:
????????????????? 方法:
????????????????? 事件:
????????????????? 委托:
????????????????? 索引器:
????????????????? 其他類:


二:接口:
????? interface IChen
????? {
???????? print();
????? }
????? class A : IChen
????? {
???????? print方法實現(xiàn);
????? }
????? class B: IChen
????? {
???????? print方法實現(xiàn);
????? }
????? 在Main窗體中,點(diǎn)擊不同按鈕,要調(diào)用不同類的print方法;
????? 創(chuàng)建接口變量:IChen Iprint;
????? if(btn1)
????? {
????????? Iprint = objA;? //如果是這樣,將該接口變量指向該對象實例
????? }
????? else if (btn2)
????? {
????????? Iprint = objB;??? //如果是這樣,將該接口變量指向該對象實例
????? }
????? Main窗體中的print方法:
????? if(this.Iprint!=null)
????? {
? this.Iprint.print();?? //調(diào)用接口的方法 ,? 因為此時該接口變量已經(jīng)動態(tài)指向了不同的對象
????? }

?

三:類和接口:


???????????? 接口?????????????????????????????????????????????????????????????????? 類
?
?1.接口本身:不能直接實例化(引用實現(xiàn)該接口的類的對象)???????????????????????? 直接實例化
???????????? 多繼承,一個接口可以繼承自多個接口???????????????????????????????? 單繼承,一個類只可以繼承自一個基類
???????????? 不提供實現(xiàn) 它有類來實現(xiàn)??????????????????????????????????????????? 實現(xiàn)類要實現(xiàn)接口的每個方面
?2.接口成員:可以包括方法 事件 索引器 屬性????????????????????????????????????? 同
???????????? 接口成員要全部是公共訪問級別?????????????????????????????????????? 多種訪問級別
???????????? 不能在后續(xù)版本中添加新成員


接口和抽象類的選擇:
?? 同:
????? 都支持協(xié)定和實現(xiàn)的分離;都是實現(xiàn)抽象機(jī)制的方法;
????? 不能進(jìn)行實例化
?? 異:
????? 接口不能提供成員的實現(xiàn)細(xì)節(jié);抽象類可以;
????? 接口不能在后續(xù)添加新成員;抽象類可以添加新成員實現(xiàn)更多功能;
??????

如何選擇:
?? 1) 優(yōu)先選擇抽象類,因為它可以在后續(xù)添加新成員可;
?? 2) 如果類要實現(xiàn)多個協(xié)定 也就是多繼承,定義接口;
?? 3) 值類型要求多態(tài)行為,定義接口;
?? 4) 協(xié)定適合于多種類型,定義接口;

?

四:類型設(shè)計:
?? 1. 類
?????? 1) 抽象類:
??????????? 不要在抽象類中定義公共的public 和受保護(hù)的內(nèi)部protected internal構(gòu)造函數(shù);應(yīng)定義成protected或private;
?????? 2) 靜態(tài)類:
?????? 4) 抽象類和接口:如上
?????? 5) 類和結(jié)構(gòu):如下

?? 2. 結(jié)構(gòu)
??????? 設(shè)計準(zhǔn)則:邏輯上表示單個值;實例大小小于16字節(jié);不可變;不別頻繁裝箱;
?? 3. 接口
????????? 避免定義空接口(標(biāo)記接口)
?? 4. 枚舉
??
?? 5. 委托:

委托是一種對象類型,表示對方法的引用而不是對方法名稱的引用。使用委托的意義在于在運(yùn)行時動態(tài)的調(diào)用方法;
調(diào)用或執(zhí)行一個委托,將執(zhí)行該委托所引用的方法;
委托要求它所引用的方法和它有同樣的返回值和參數(shù)類型;

?

public class MyDelegate
{

// 1.定義委托
public delegate int Call(int num1,int num2);

class Math
{
?? // 2. 方法的實現(xiàn),它和所定義的委托有同樣的返回值,以及相同類型的參數(shù)
?? 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. 實例化該委托對象 使其引用某個具體的方法,將方法做為參數(shù)傳遞;

????? result=objCall(10,20);? //5.調(diào)用委托,實際上是使用委托對方法進(jìn)行實例化,
????????????????????????????? //這里不是調(diào)用委托的實現(xiàn),因為他沒有實現(xiàn),調(diào)用的是與委托關(guān)聯(lián)的方法的實現(xiàn);

????? Console.WriteLine("the result is :",result);

?? }
}

}

?? 5. 嵌套類型:
???????? 嵌套類型可以訪問聲明類型中的所有其他成員

??

?

封裝:
????? 封裝最大的益處就是,當(dāng)一個實體放生變動,不波及其他實體;
?????
繼承:


? 方法重寫:

? base 關(guān)鍵字:
?? 用于從子類中訪問基類成員; 如java中的super
?? 使用base關(guān)鍵字只能訪問基類的構(gòu)造函數(shù) 實例方法或?qū)嵗龑傩?,不能訪問基類的靜態(tài)方法。

? override 關(guān)鍵字:
??? 用于重寫基類中的virtual abstract 方法;但重寫的方法和基類中的方法有同樣的訪問級別
????


? new關(guān)鍵字:
?? 用于隱藏基類方法;
?? 1.? 使用 new 關(guān)鍵字時,調(diào)用的是新的類成員而不是已被替換的基類成員。這些基類成員稱為隱藏成員。
?? 2.? 如果將派生類的實例強(qiáng)制轉(zhuǎn)換為基類的實例,就仍然可以調(diào)用隱藏類成員

?


? virtual關(guān)鍵字:
??? 將方法定義為多態(tài),也就是對可修改的方法的聲明;在子類中使用override關(guān)鍵字實現(xiàn);

? abstract關(guān)鍵字:
??? 將方法定義為抽象,由子類具體實現(xiàn);

? override 和 new 對方法的版本控制:
??? 當(dāng)子類和基類具有相同的方法名稱:

?????? 首先基類中的方法要有virtual關(guān)鍵字;

?????? 如果子類方法不帶這兩個方法:會默認(rèn)添加new 子類對象調(diào)用的是基類的方法;
?????? 如果子類方法帶override:則子類對象調(diào)用該方法;
?????? 如果子類方法帶new:則會子類對象調(diào)用基類中的方法;
?????? 如果子類方法中使用base:和使用new是同樣效果;
???????? public void Fun()
??????? {
??????????? base.Fun();
??????????? //Console.WriteLine("這是子類B");
??????? }


多態(tài):
???? 一個類可以用作多種類型:可以用作它自己的類型、任何基類型,或者在實現(xiàn)接口時用作任何接口類型。這稱為多態(tài)性。C# 中的每種類型都是多態(tài)的.


?? 方法重載:
??????? 在同一類型中定義多個具有相同名稱,不同參數(shù)列表(參數(shù)個數(shù)不同,參數(shù)的順序不同),返回值可同可不同的方法;

?

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/lf_software/archive/2009/03/03/1402364.html

總結(jié)

以上是生活随笔為你收集整理的C#中的OOP相关概念的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。