繼續(xù)更新。。。接下來(lái)就是面向?qū)ο蟮闹R(shí)了
1、面向?qū)ο螅焊拍睿菏褂妹嫦驅(qū)ο蟮乃枷脒M(jìn)行編程可以讓的程序變得擴(kuò)展性更高,便于維護(hù);
我們?cè)诂F(xiàn)實(shí)生活中去描述一個(gè)人的時(shí)候,通過(guò)描述這個(gè)人的特征和行為。我們?cè)诰幊坍?dāng)中,去描述一個(gè)對(duì)象的時(shí)候,通過(guò)描述這個(gè)對(duì)象的屬性和方法。
對(duì)象時(shí)具體的,不是抽象的,一定是看得見(jiàn)摸得著的。
我們把一些具有相同屬性和方法的對(duì)象進(jìn)行進(jìn)一步的抽象,提取出了"類"這個(gè)概念。類就是模子,確定了對(duì)象將要擁有的屬性和方法。
2、類:
語(yǔ)法:
[訪問(wèn)修飾符] class 類名{成員;......}訪問(wèn)修飾符:public,公開(kāi)的,公共的,在哪都可以訪問(wèn)class:是我們聲明類的關(guān)鍵字類名:要符合Pascal命名規(guī)范成員:字段、屬性、方法。
總結(jié):1)、我們?cè)趯?xiě)一個(gè)類的時(shí)候,需要在項(xiàng)目中新建一個(gè)類文件。2)、在類中,默認(rèn)的訪問(wèn)修飾符是PRivate,表示私有的,只能在當(dāng)前類的內(nèi)部訪問(wèn)。3)、在類中,我們現(xiàn)在可以寫(xiě)3種成員,字段,屬性和方法4)、我們寫(xiě)好了一個(gè)類之后,需要?jiǎng)?chuàng)建這個(gè)類的對(duì)象,叫做類的實(shí)例化5)、類是不占內(nèi)存的,但是對(duì)象時(shí)占內(nèi)存的。6)、自定義類,屬于引用類型,我們的對(duì)象存儲(chǔ)在內(nèi)存的堆中。
3、屬性:
1)、我們要求將類中所有的字段都標(biāo)記為private,但是標(biāo)記為private之后,類中的字段在外界沒(méi)有辦法被訪問(wèn)。2)、并沒(méi)有辦法對(duì)字段的非法值進(jìn)行處理屬性的出現(xiàn)解決了上面兩個(gè)問(wèn)題:語(yǔ)法:[訪問(wèn)修飾符] 屬性類型 屬性名{get{}set{}}屬性的出現(xiàn)了保護(hù)了字段,對(duì)字段的取值和設(shè)置進(jìn)行了限定。1)、在賦值的時(shí)候進(jìn)行判斷,也就是在set方法中2)、在取值的時(shí)候進(jìn)行判斷,也就是在get方法中屬性中既有g(shù)et也有set,我們叫做可讀可寫(xiě)屬性。只有g(shù)et叫做只讀屬性,意味著我們只能給屬性取值,而不能對(duì)屬性賦值。只有set叫做只寫(xiě)屬性,意味著我們只能給屬性賦值,但是不能對(duì)屬性取值。
4:關(guān)于this關(guān)鍵字的含義:
1)、代表當(dāng)前這個(gè)類的對(duì)象。2)、顯示的調(diào)用本類的構(gòu)造函數(shù)。
4.1:成員變量和局部變量
局部變量:方法中的成員都是局部變量。成員變量:類中的變量局部變量的作用域就是當(dāng)前方法,而成員變量的作用域當(dāng)前類。(上面的this很能說(shuō)明這個(gè))
小總結(jié):
字段:存儲(chǔ)數(shù)據(jù)屬性:保護(hù)字段,通過(guò)兩個(gè)方法 get、set方法:描述這個(gè)對(duì)象的行為字段跟屬性的關(guān)系:字段就是女人 屬性就是男人(男人一般在外打交道,女人嘛。。。你懂得)
5、構(gòu)造函數(shù):構(gòu)造函數(shù)其實(shí)就是一個(gè)特殊的方法,用來(lái)初始化對(duì)象。
eg:[public] class Person
{
}
[public] Person()
{
}
特殊有二:1)、構(gòu)造函數(shù)的名稱跟類名一樣。2)、構(gòu)造函數(shù)沒(méi)有返回值。連void都沒(méi)有。
注:
在類中,如果你不指定其他的構(gòu)造函數(shù),則會(huì)默認(rèn)有一個(gè)無(wú)參數(shù)的構(gòu)造函數(shù)。當(dāng)你寫(xiě)了一個(gè)新的構(gòu)造函數(shù)后。不管這個(gè)新寫(xiě)的構(gòu)造函數(shù)有參數(shù)還是沒(méi)有參數(shù),都會(huì)把原來(lái)那個(gè)默認(rèn)的無(wú)參數(shù)的構(gòu)造函數(shù)干掉。
5.1關(guān)于new關(guān)鍵字的含義:
1)、在堆中開(kāi)辟空間2)、在開(kāi)辟的堆空間中創(chuàng)建對(duì)象3)、調(diào)用對(duì)象的構(gòu)造函數(shù)進(jìn)行初始化
4)、隱藏父類的成員
6、靜態(tài)和非靜態(tài)的區(qū)別
1)、被static標(biāo)記的成員叫做靜態(tài)成員,沒(méi)有被static標(biāo)記的成員叫做實(shí)例成員或者非靜態(tài)成員。2)、在一個(gè)非靜態(tài)類中,既能出現(xiàn)靜態(tài)成員,也能出現(xiàn)非靜態(tài)成員。3)、非靜態(tài)成員需要使用對(duì)象去調(diào)用,而靜態(tài)成員需要使用類名去調(diào)用。4)、為什么對(duì)象不能去調(diào)用靜態(tài)成員?靜態(tài)成員是隨著程序的加載,就已經(jīng)在內(nèi)存中開(kāi)辟空間的。5)、靜態(tài)方法中只允許使用靜態(tài)成員,但是非靜態(tài)方法中既可以使用靜態(tài)成員也可以使用非靜態(tài)成員。6)、靜態(tài)類中所有的成員都必須是靜態(tài)成員。7)、靜態(tài)類不允許被創(chuàng)建對(duì)象,因?yàn)闆](méi)有實(shí)際意義
6.1:為什么要使用靜態(tài)類?
1)、當(dāng)這個(gè)類被用作工具類的時(shí)候,可以考慮寫(xiě)成靜態(tài)類。Console con=new Console();con.WriteLine();Console.WriteLine();2)、靜態(tài)成員在整個(gè)項(xiàng)目中是資源共享的。
7、訪問(wèn)修飾符
public:公開(kāi)的公共的,在哪都可以訪問(wèn)。private:私有的,只能在當(dāng)前類的內(nèi)部訪問(wèn),出了這個(gè)類就訪問(wèn)不到了internal:表示只能在當(dāng)前項(xiàng)目的內(nèi)部進(jìn)行訪問(wèn),出了這個(gè)項(xiàng)目就訪問(wèn)不到了。
(總和5個(gè)訪問(wèn)修飾符 基本上用這3個(gè)就夠了)
8、特殊的字符串
字符串對(duì)于我們而言是一個(gè)非常特殊的類型,特殊原因有二:1)、字符串不可變性,我們每次對(duì)字符串重新賦值、拼接等操作,都會(huì)在內(nèi)存中產(chǎn)生一個(gè)新的實(shí)例。string s1="張三";s1="李四";2)、字符串可以看做是char類型的只讀數(shù)組8.1:字符串常用的方法:ToCharArray():將字符串轉(zhuǎn)換為char數(shù)組new string(char[]):將char數(shù)組轉(zhuǎn)換為字符串Length:獲得字符串的字符個(gè)數(shù)ToUpper():將字符串轉(zhuǎn)換為大寫(xiě)形式ToLower():將字符串轉(zhuǎn)換為小寫(xiě)形式Equals():比較字符串,可以忽略字符串的大小寫(xiě)Split():可以把我們?cè)谧址胁幌胍淖址记懈畛鋈?/p>
9、面向?qū)ο蟮?大特征:
9.1、封裝:把程序當(dāng)中重復(fù)出現(xiàn)的代碼封裝成了方法。(這個(gè)不用多說(shuō)想必大家都已明白)
9.2、繼承:繼承可以解決類與類之間的冗余代碼。
我們把類當(dāng)中,所共有的成員,單獨(dú)的封裝一個(gè)類。 讓其他類來(lái)繼承這個(gè)類。
例如寫(xiě)了 Person 和 Student 2個(gè)類 ,Student類繼承了Person類,那么我們管Student類稱之為子類或者派生類。管Person類叫做父類或者基類。
子類繼承了父類的屬性和方法,并沒(méi)有繼承父類的私有字段。
注:子類并沒(méi)有繼承父類的構(gòu)造函數(shù),但是,子類會(huì)默認(rèn)的調(diào)用父類無(wú)參數(shù)的構(gòu)造函數(shù)。
為什么子類要去調(diào)用父類無(wú)參數(shù)的構(gòu)造函數(shù)?1)、我們可能會(huì)在父類無(wú)參數(shù)的構(gòu)造函數(shù)當(dāng)中對(duì)父類成員進(jìn)行初始化2)、因?yàn)樽宇愋枰褂酶割惖某蓡T,需要?jiǎng)?chuàng)建父類的對(duì)象。
(如果我們?cè)诟割愔行聦?xiě)了一個(gè)構(gòu)造函數(shù),這個(gè)時(shí)候會(huì)干掉父類那個(gè)默認(rèn)的無(wú)參數(shù)的構(gòu)造函數(shù))解決辦法:
1)、在父類中重新寫(xiě)一個(gè)無(wú)參數(shù)的構(gòu)造函數(shù)2)、顯示的調(diào)用父類有參數(shù)的構(gòu)造函數(shù)。使用關(guān)鍵字base
base跟this不一樣:base代表父類的引用;this代表的是該類的對(duì)象。
注:子類可以使用父類的成員,但是父類永遠(yuǎn)只能使用自己的成員。
9.3、繼承的兩大特性:
1)、單根性:一個(gè)子類只能繼承自一個(gè)父類。2)、傳遞性:父類中的成員,可以一代一代的向下傳遞。
10、里氏轉(zhuǎn)換:
兩句話:
1、子類可以賦值給父類(如果有一個(gè)地方需要一個(gè)父類作為參數(shù)我們可以傳遞一個(gè)子類)
eg:
class Person { public void PersonSayHello() { Console.WriteLine("我是父類"); } }
class Student : Person { public void StudentSayHello() { Console.WriteLine("我是學(xué)生"); } }
class Teacher : Person { public void TeacherSayHello() { Console.WriteLine("我是老師"); } }
Student s = new Student();
Person p = new Student();
2、如果父類中裝的是子類對(duì)象,那么可以將這個(gè)父類強(qiáng)值轉(zhuǎn)換為對(duì)應(yīng)的子類對(duì)象
eg:
Student s = (Student)p;
s.StudentSayHello();
10.1、is和as:is 和 as都表示類型轉(zhuǎn)換。
is:如果轉(zhuǎn)換成功,返回true,否則返回false
eg:
Person p = new Student();
if (p is Student)
{
(Student)p).StudentSayHello();
}
else{ Console.WriteLine("轉(zhuǎn)換失敗");}
as:如果轉(zhuǎn)換成功,則返回對(duì)應(yīng)的對(duì)象,否則返回null
eg:
Person p = new Student();
Student s = p as Student; s.StudentSayHello(); Console.ReadKey();
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注