中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

[C#學習筆記]面向對象-創新互聯

編寫程序只不過是對象堆砌而成的,這些對象可以是獨立的,也可以是從另外一個對下崗繼承過來,對

創新互聯-專業網站定制、快速模板網站建設、高性價比修文網站開發、企業建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式修文網站制作公司更省心,省錢,快速模板網站建設找我們,業務覆蓋修文地區。費用合理售后完善,十年實體公司更值得信賴。

象之間可以傳遞消息,并通過消息來改變自身的狀態.

類是對象的模板.即類是對一組由相同數據和相同操作的對象的定義,一個類所包含的方法和數據描述

一組對象的共同屬性和行為.類是在對象之上的抽象,對象則是類的具體化. 類可以有其子類,也可有

其他類,形成類層次結構.

類是對具有相同屬性和行為的一組形似的對象的抽象.

面向對象的基本特征: 封裝,繼承,多態

Object是所有的類的基類.

定義類與創建類的對象

class Myclass{

//類的主題

}

★★★★類的修飾符

在定義類是,可以在類的前面添加訪問修飾符,類的修飾符用于控制被訪問的范圍.默認情況下,類的修

飾符為private

new僅允許在嵌套類定義時使用,以表明類中隱藏了由基類中繼承而來的與基類中同名的成員

public類可以在任何地方訪問

protected只能從所在類和所在類的派生出來的子類進行訪問,不能實例化,只能繼承.

★★★★創建類的對象

MyClass myclass = new MyClass();

結構的定義:

結構與類相似,主要區別在于:類是存儲在堆上的引用類型,而結構式存儲在堆棧上的值類型,以及訪問

方式和一些特征(例如:結構不支持繼承);

定義結構:

在語法上,定義結構和定義類非常相似,主要區別是定義結構使用struct關鍵字代替class關鍵字.對于

類和結構,都是用new關鍵字生聲明實例

struct FirstStruct{  //聲明結構

//代碼

}

FirstStruct first = new FirstStruct(); //實例化結構

類的數據成員:

構造函數,析構函數,常數,字段,方法,屬性,索引器,運算符,事件,委托,類,接口,結構.

方法:

public string FangFa(){

return "返回值";

}

public void FangFa(){

Message.Show("無返回值");

}

★★★★ref關鍵字

可以通過引用為方法傳遞參數,不過若通過引用為方法傳遞參數,需要使用ref關鍵字.

string sex ="www";

Person  p = new Person();

string name = p.GetName(ref sex);  //這里將會把sex值改為女

Console.WriteLine("");

class Person {

public void GetName(ref string sex)

{

sex="女";

}

}

★★★★out關鍵字

out關鍵字和ref關鍵字很相似,out關鍵字也會導致參數通過引用來傳遞.與ref關鍵字不同之處在于

ref要求變量必須在傳遞之前進行初始化.如果使用out關鍵字,方法定義和調用方法都必須顯示使用

out關鍵字.盡管作為out參數傳遞的變量不必再傳遞之前進行初始化,但必須在方法中為out參數賦值.

在方法中傳遞參數時使用out關鍵字,便是這個變量要回傳值.最簡單的運用時除法,例如你需要一個除

法方法,同時得到余數和商.但是普通的方法只能返回一個值,這個時候就可以使用out參數,把另一個

值返回.

int i = 15;

int j = 6;

int yushu;

Person p = new Person();

Consol.WriteLine();

class Person{

public int GetShangYuShu(int i,int j, out int yushu){

yushu = i%j;

return i/j;

}

}

★★★★重載

在C#中,類成員都有一個唯一的簽名,而方法的簽名由名稱\參數個數和參數數據類型組成.只要簽名不

同,就可以在一種類型內定義具有相同名稱的多種方法.當定義兩種或多種具有相同名稱的方法時,就

稱重載.

通俗的講: 方法重載就是方法名相同,參數個數或參數類型不同.

string name ="小米";

int age = 21;

Peson p = new Person();

p.GetName();

p.GetName(name,age);

class Person{

public void GetName(){//重載方法1

//代碼

}

public void GetName(string name){ //重載方法2

//代碼

}

public void GetName(string name,int age){ //重載方法3

//代碼

}

}

★★★★靜態方法

定義靜態方法和定義非靜態方法相似,只是在定義靜態方法時,需要在返回類型前加static關鍵字.靜

態放在程序啟動時系統會在內存里為靜態方法創建一個實例,不需要再手動去實例靜態方法.通過類名

可以直接調用靜態方法,還有就是靜態方法會在內存中占一定的內存空間.

在類中一旦定義了靜態方法,name在類中就可以直接通過類名調用靜態方法,并不需要通過實例化對象

訪問靜態方法.

注意:系統一旦為靜態方法分配了內存空間,靜態方法就會一直占用.所以在系統內存比較小時,盡量少

用靜態方法.

public static string GetName(){

return"www";

}

擴展方法使你能夠向現有類型"添加",而無需創建新的派生類型\重新編譯或以其他方式修改原始類型

.擴展方法是一種特殊的靜態方法,但可以像擴展類型上的實例方法一樣進行調用.因此,通過擴咱方法

,就可以在不修改一個類型的前提下對一個類型進行功能上的擴充.

★★★★擴展方法

擴展方法使你能夠向現有類型"添加"方法,而無需創建新的派生類型,重新編譯或以其他方式修改原始類型.擴展方法時一種特殊的靜態方法,但可以像擴展類型上的實例方法一樣進行調用.它定義在靜態類中,但可以在其他類的對象上像調用實例方法那樣進行調用.因此,通過擴展方法,就可以在不修改一個類的前提下對一個類進行功能擴充.

擴展方法和一般的靜態方法的定義類似,唯一區別是在第一個參數的前面加上關鍵字this作為修飾符,同時第一個參數也決定了擴展方法可以擴展的類型.

public static class AddClass{

public static string GetLower(this string str)

{

return str.ToLower();

}

public static string GetName(this Student stu)

{

return "擴展方法";

}

public static string GetCanShu(this Student stu,string str) //帶參數的擴展方法

{

return str;  //返回參數str

}

}

public class Student{

//這里沒有代碼

}

//----------調用代碼

string URL = "HTTP://WWW.XXX.COM"; //要轉化為小寫字母的字符串

URL.GetLower(); //結果: http://www.xxx.com

Student s = new Student();  //實例化Student類

s.GetNme(); //結果: 擴展方法

string str = "擴展方法參數"  //結果:擴展方法參數

//------------擴展方法的特點

1.擴展方法是給現有類型添加一個方法.

2.擴展方法是通過制定關鍵字this修飾第一個參數

3.擴展方法必須聲明在靜態類中.

4.擴展方法要通用對象來調用.

5.擴展方法可以帶參數.

★★★★屬性

在C#編寫的程序中,屬性提供靈活的幾只讀取或編寫私有字段的值.使用屬性可以像使用公共數據成員一樣使用屬性,單實際上它們是稱作"訪問器"的特殊方法.這使得可以輕松訪問數據,此外還有助于提高方法的安全性和靈活性.

對于類的實例化對象,屬性顯示為字段.對于類的構造來說,屬性是一個或兩個代碼塊:表示一個get訪問器和set訪問器.當讀取屬性時,執行get訪問器的代碼塊;當向屬性分配一個新值時,執行set訪問器的代碼塊.value關鍵字用于定義set索引器分配的值.

語法格式

public string PropertyName

{

get{

return "返回私有變量的值或返回其他一些有意義的值";

}

set{

//為屬性相關的私有變量賦值

}

}

例子:

public class Student{

string _name; //聲明私有字段

public string Name{

get{

return _name

}

set{

_name = value;

}

}

}

Student stu = new Student();

stu.name = "屬性";

//------set索引器可以進行判斷,改寫代碼如下

set{

if(value=="屬性"){

_name = "你是輸入的是屬性,符合要求"

}else{

_name = "你輸入的非法";

}

}

以上看出在使用set索引器為屬性賦值時,可以對賦值的數據進行判斷,提高安全性.

★★★★自動屬性

當屬性訪問器中不需要其他邏輯時,自動實現的屬性可以使屬性聲明變得更加簡潔.

一旦在類中聲明了自動屬性,那么編譯器將創建一個私有的匿名后備字段,但是這個私有字段只能通過屬性的get和set訪問器進行訪問.

自動屬性必須同時聲明get和set訪問器.若要穿件只讀自動屬性,必須在set訪問器前加private關鍵字.

聲明:

public class Student

{

public int Age{

set;

get;

}

}

Student stu = new Student();

stu.Age = 15;

//感覺自動屬性沒什么用!

★★★★構造函數

構造函數具有與類相同的名稱,他通常初始化新對象的數據成員.在類中不帶參數的構造函數為類的默認構造函數,除非類是static(即靜態類)的,否則C#編譯器將為無構造函數的類提供一個公共的默認構造函數,一便該類可以實例化.無論何時,只要使用new關鍵字實例化對象,不提供參數就會調用默認構造函數.

注意: 如果構造函數設置了私有構造函數(使用private關鍵字),那么該類不能被實例化.

如果聲明的構造函數帶有參數,那么我們在實例化時也必須提供相應的參數,否則會出錯.但是同時有聲明了不帶參數的構造函數,就調用該構造函數,也就是說的重載.

構造函數的特征:

1.類的構造函數函數名與類名相同

2.構造函數沒有返回值

3.一般情況構造函數為public

★★★★對象初始化器

對象初始化器(Object Initializers)和集合初始化器(Collection Initializers)就是簡化代碼,讓本來幾行才能寫完的代碼一行寫完.

作用:可以在創建對象時向對象的任何可訪問的字段或屬性賦值.

例子:

class Student{

public string name;

public string sex{get; set;} //自動屬性

}

Student stu = new Student{name = "名字",Sex = "男"}; //使用{}以;結束

Student stu = new Student{Sex = "男"}; //也可以只為其中一個字段賦值

★★★★析構函數

在C#中很少使用析構函數,但是,當應用程序瘋長窗口,文件,網絡連接等這類非托管資源時,應當使用析構函數釋放這些資源.

1.不能再結構中定義析構函數,只能對類使用析構函數

2.一個類只能有一個析構函數

3.無法繼承或重載析構函數

4.無法調用析構函數,他們被自動調用

5.析構函數沒有修飾符,也沒有參數

例子:

public class Student{

~Student(){

//和類名相同,前面加~符合

}

}

★★★★readonly關鍵字

readonly修飾符只能用于字段(不能用于局部變量),只能在構造函數和聲明中賦值.

例:

public class RendKey{

public readonly string Name;//聲明沒有賦值,只能在構造函數中進行賦值

public readonly string Age = 15; //聲明時賦值(正規書寫格式首字符大寫)

}

與const修飾符的區別

1.readonly修飾的字段即使在聲明時賦值了也可以在構造函數中對其進行更改. const修飾符聲明時必須賦值,以后任何情況下都不允許更改.readonly修飾符即可以是實例字段也可以是靜態字段.

2.將readonly應用于一個數組,不會凍結數組的內容.它只會凍結數組中的元素數量,因為現在無法將只讀字段重新賦值為一個新的實例,數組中的元素仍然是可寫的.

★★★★類的繼承

類了除了繼承于類還可以繼承于接口,C#中類只能繼承一個類,多重繼承使用繼承多個接口來實現.

子類從父類中繼承了所有非私有數據和行為(屬性,方法),可以說子類是對父類的擴展,但是構造函數和析構函數是不會被繼承的.

語法格式:

public class BaseClass{

//父類

}

public class MyClass : BaseClass{

//子類

}

★★★★虛方法

在一個基類中,使用virtual修飾符修飾方法,屬性,索引器或事件聲明,那么他們就可以在派生類中被重寫.使用

virtual關鍵字在基類中修飾的方法,就是平常所說的虛方法.在派生類中使用override關鍵字重寫虛方法.

注意:成員字段和靜態方法都不能聲明為virtual,因為這個概念只對類中實例成員有意義.

class Person {

public virtual void Work(){

Console.WriteLine("這是一個虛方法");

}

}

class Student : Person{

public override void Work(){

Console.WriteLine("通過override關鍵字重寫Work虛方法");

}

}

Student stu = new Stutent(); //實例化Student類

stu.Work();

★★★★調用方法的基類版本

在派生類中,可以使用base關鍵字訪問基類成員,base關鍵字指定創建派生類實例時應用調用的基類構造函數,但

是不能在靜態方法中使用base關鍵字.

1.關鍵字用于從派生類中訪問基類的成員:

2.調用基類上已被其他方法重寫的方法。

3.指定創建派生類實例時應調用的基類構造函數。

4.基類訪問只能在構造函數、實例方法或實例屬性訪問器中進行。

★★★★隱藏方法

在派生類中,使用new關鍵字可以顯示隱藏從基類繼承的成員.若要隱藏繼承的成員,請使用相同名稱在派生類中

聲明該成員,并用new修飾符修飾它,該成員就是獨立于基類的方法.

例子:

class Person{

public string name = "小王";

public string sex ="男";

public void WriteInfo()

{

Console.WriteLine("人員信息:姓名{0},性別:{1}",name,sex);

}

}

class Student : Person

{

new public void WriteInfo(){

Consol.WriteLine("學生信息:姓名{0},性別:{1}",name,sex);

}

}

Student s = new Student();

s.WriteInfo();//這里調用子類的WriteInfo()方法

★★★★C#中重寫父類方法的幾種情況

關鍵字:virtual、abstract、override、new。

1. virtual:標識可能但不是必須被子類重寫的方法,父類必須給出默認實現,子類可以重寫(使用

override,new,或無特殊標識的普通方法),也可以不重寫該方法。

2. abstract:標識必須被子類重寫的方法,父類并不給出實現,子類必須用override關鍵字重寫該方法。

3. override:標識重寫父類的方法,父類方法必須是用abstract,virtual,override之一聲明,運行時將根

據  實例的類型而不是引用的類型調用對象的方法。

4. new:標識重寫父類的方法,父類方法可以用virtual、override、new之一聲明,也可以是沒有特殊標識的

普   通方法,運行時會根據引用的類型選擇調用父類還是子類的方法,重寫父類方法時,使用new關鍵字與使

用沒   有特殊標識的普通方法是等效的,但是后者會給出一個編譯警告。

★★★★抽象類和抽象方法

抽象類是一種特殊的類,他可以擁有數據成員,可以是其他類的子類.但是和具體類(非抽象類)不同,抽象類的某

些行為故意留給其子類來定義.

在C#中使用abstract關鍵字聲明抽象類.abstract關鍵字可以和方法,屬性,索引器及事件一起使用.標記為抽象

或包含在抽象類中的成員必須通過從抽象類的子類中在實現.

注意:抽象類不能夠實例化,需要通過子類重寫抽象類中的成員方法,然后實例化子類來實現.

抽象方法也是由關鍵字abstract聲明,抽象方法需要使用;號結束,這和常規定義的方法塊不同.抽象方法只能在

抽象類中聲明.

例子:

class Person{

public abstract void Work();  //定義了一個抽象類

}

class Student{

public override void Work(){//使用override關鍵字重寫抽象類

Console.WriteLine("重寫抽象方法");

}

}

Student s = new Student();

s.Work();

★★★★密封類和密封方法

在應用程序中,有時候開發人員編寫的類,并不希望被繼承或沒有必要被繼承,為此C#提出了密封類的概念,密封

類在聲明中使用sealed關鍵字.這樣就可以防止類別其他類繼承.

密封類可以組織其他開放人員在無意中繼承,而且密封類可以起到運行時優化效果.

如果視圖將一個密封類作為其他類的基類,C#將提示出錯.密封類不能同時又是抽象類,因為抽象類是需要被繼承

的,可以說sealed關鍵字不能喝abstract關鍵字一起使用.

密封類不可能有派生類,如果密封類實例中存在虛成員函數,該成員方法可以轉化為非xude ,方法關鍵字將不再

生效.

class Person{

public virtual void Work(){

Console.WriteLine("聲明封閉類時需要繼承一個父類,不能直接聲明");

}

}

sealed class Student : Person //使用sealed關鍵字聲明封閉類

{

public sealed override void Work(){

Console.WriteLine("使用sealed關鍵重寫父類的方法");

}

}

Student s = new Student();

s.Work();

★★★★部分類

★★★★接口

在應用程序中,接口就是一種規范,接口封裝了可以被多個類繼承的一些公共部分.但是接口不能包含字段.聲明

接口使用interface關鍵字,接口中的成員默認是public,所以在聲明成名方法時不需要加public關鍵字.接口中

的成員必須是非靜態的.

例子:

interface Person{

//string name; 如果包含字段,程序將會報錯.

void Work();

}

class Student : Person{

public void Work(){

Console.WriteLine("這個類繼承與接口類Person");

}

}

Student s = new Student();

s.Work();

創新互聯www.cdcxhl.cn,專業提供香港、美國云服務器,動態BGP最優骨干路由自動選擇,持續穩定高效的網絡助力業務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統配攻擊溯源,準確進行流量調度,確保服務器高可用性。佳節活動現已開啟,新人活動云服務器買多久送多久。

網站標題:[C#學習筆記]面向對象-創新互聯
地址分享:http://www.2m8n56k.cn/article48/pcjhp.html

成都網站建設公司_創新互聯,為您提供定制開發外貿網站建設建站公司Google網站制作小程序開發

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

商城網站建設
主站蜘蛛池模板: 成人欧美一区二区三区黑人免费 | www.99在线观看| 欧美色xxxx | 久国产精品视频 | 亚洲国产一区二区三区四区 | 九九免费精品视频 | 九九视频在线播放 | 欧美日韩高清观看一区二区 | 欧美成人性色区 | 国产真实孩交 | 亚洲国产成人久久精品影视 | 久久久在线 | 国产乱色在线观看 | 日本一级毛片免费播放 | 114一级毛片免费 | 欧美满嘴射 | 国产精品亚洲欧美 | 欧美午夜影院 | 国产美女做爰免费视频网址 | 在线a视频网站 | 日韩美女网站在线看 | 日本视频在线免费播放 | 国产一区二区三区在线看 | 免费在线观看a级毛片 | 国产欧美一区二区三区精品 | 欧美在线视| 黄片毛片在线观看 | 成人合成mv福利视频网站 | 亚洲午夜网站 | a级毛片无码免费真人 | 免费一级毛片女人图片 | 欧美国产一区二区 | 精品国产免费观看 | 色婷婷国产精品欧美毛片 | 欧美大片在线观看成人 | 久草免费公开视频 | 中文字幕福利 | 久久精品久久精品久久 | 成人牲交一极毛片 | 91久久精品国产91性色tv | 久久免费福利 |