C# 面向?qū)ο笮〗馕?/h3>
|
admin
2024年1月30日 16:7 本文熱度 489 |
下來我們開始了解C#的面向?qū)ο蠓矫嬷R,首先來認識一下面向?qū)ο蟆?br style=";padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible"/>
面向?qū)ο?/strong>:
面向?qū)ο蟪绦蛟O(shè)計(Object Oriented Programming,OOP)是一種計算機編程架構(gòu)。OOP的一條基本原則是計算機程序由單個能夠起到子程序作用的單元或?qū)ο蠼M合而成。OOP達到了軟件工程的三個主要目標:重用性、靈活性和擴展性。OOP=對象+類+繼承+多態(tài)+消息,其中核心概念是類和對象。
--- 百度百科
通過百度百科來看,發(fā)現(xiàn)這說的是個神馬玩意兒,還是給一個切實生活的例子來看,以洗衣服為例,設(shè)定兩個對象,一個是洗衣機,一個是人,人去完成洗衣服這個動作,對于洗衣機有以下方法:洗衣服方法,脫水方法,烘干方法。對于人有以下方法:加衣服方法,加洗衣粉方法,按啟動按鈕方法。
然后開始執(zhí)行這個流程:人加衣服--人加洗衣服--人按啟動按鈕--洗衣機洗衣服--洗衣機脫水--洗衣機烘干,通過一個個方法來完成洗衣服這個流程,簡單來說就是某個對象執(zhí)行某個動作完成某件事,而不是直接一步步執(zhí)行方法,那是面向過程。
面向?qū)ο笥腥筇匦裕悍庋b,繼承,多態(tài),在文章中會體現(xiàn)出來。
對于面向?qū)ο蟮母怕视辛舜致缘牧私?,接下來先來了解如何檢測異常
異常處理:
異常就是程序中有語法錯誤或者用戶輸入錯誤等等,這會導(dǎo)致程序無法運行,首先系統(tǒng)有它自己的異常處理方法,例如下面我定義了一個變量stu,類型為string,但我賦給它一個int類型數(shù)據(jù),系統(tǒng)直接報錯,說無法給stu一個int類型數(shù)據(jù)。
當我們想完成一個兩個數(shù)加法運算,讓用戶輸入數(shù)據(jù),來執(zhí)行加法,首先我們知道C#輸入只能是字符串類型,要利用Convert來將string類型轉(zhuǎn)為值類型來,而在輸入時,如果用戶輸入錯誤,輸入的不是數(shù)字,那程序就直接結(jié)束并報錯,如下所示:
而我們可以利用異常處理語句來讓程序遇到錯誤時對錯誤進行解決,來完成下一步動作,異常處理語句有以下三個關(guān)鍵詞:try,catch,finally
try:一個 try 塊標識了一個將被激活的特定的異常的代碼塊。后跟一個或多個 catch 塊。(就是可能出現(xiàn)異常的代碼)
catch:程序通過異常處理程序捕獲異常。(就是要捕獲哪方面異常)
finally:執(zhí)行給定的語句,不管異常是否被拋出都會執(zhí)行。
try { // 可能會異常的語句 } catch(ExceptionName e) { // 處理方法 } finally { // 執(zhí)行語句 }
關(guān)于有哪些異常我們來看菜鳥教程:異常類主要來自System.Exception類,所以Exception就包含所有可能的異常。
下面我們就利用異常處理來完成對加法運算異常的檢測,讓程序在遇到異常時不是直接結(jié)束程序,而是解決異常,繼續(xù)執(zhí)行程序。
Console.WriteLine("請輸入兩個數(shù)字,空格隔開");
string[] array = new string[2];
int a1 = 0;
int a2 = 0;
while (true)
{
try
{
array = Console.ReadLine().Split(" ");
a1 = Convert.ToInt32(array[0]);
a2 = Convert.ToInt32(array[1]);
break;
/*
* try會一句一句檢查是否出現(xiàn)異常
* 當檢測到a1有異常它就不會執(zhí)行a2,直接執(zhí)行catch
* 當兩個都沒有異常就直接跳出循環(huán)執(zhí)行后面的語句
*/
}
catch (Exception e)
{
Console.WriteLine("要輸入兩個數(shù)字哦,請重新輸入!");
}
}
Console.WriteLine(a1 + " * " + a2 + " = " + (a1 + a2));
如果有finally語句就是以下效果:
finally { Console.WriteLine("管你有沒有異常,我就要輸出"); }
可以發(fā)現(xiàn)當有異常時,系統(tǒng)除了會輸出處于catch和finally中的語句外,不會執(zhí)行其他的語句,當沒有異常時才會接下去執(zhí)行。
了解完異常處理,接下來開始面向?qū)ο蟮挠嘘P(guān)內(nèi)容,首先是C#中的類。
類(Class:
當你定義一個類時,你定義了一個數(shù)據(jù)類型的藍圖。這實際上并沒有定義任何的數(shù)據(jù),但它定義了類的名稱意味著什么,也就是說,類的對象由什么組成及在這個對象上可執(zhí)行什么操作。對象是類的實例。構(gòu)成類的方法和變量稱為類的成員。 --- 菜鳥教程
類的定義:
關(guān)鍵字class,后面接類的名稱,花括號中為類的主體。
如何創(chuàng)建一個類:
其實我們創(chuàng)建一個程序時,就創(chuàng)建了一個類,如圖所示,這是一個剛創(chuàng)建的程序文件,它就自動生成一個名為Program的類,這個名字和文件名是一樣的。
接下來演示如何創(chuàng)建一個類,我們創(chuàng)建一個名為Car的類。
這樣我們創(chuàng)建好了一個名為Car的類,這些using都是會自動生成的,然后我們可以給類中添加成員。成員要有訪問表示符,默認為private(私有的),此時無法直接在其他類中使用,設(shè)為public(公共的)就可以隨意使用了。
public string brand; // 牌子 public int speed; // 速度 private int maxSpeed; // 最大速度 public string weight; // 重量
如何使用類中的成員:首先要new一個對象來使用這個類。如下所示:
Car car1 = new Car(); car1.brand = "瑪莎拉蒂"; car1.speed = 270; car1.weight = "1.5T";
這樣就可以使用類中定義的成員了,可以看到里面缺少了maxSpeed這個成員,因為它的訪問符為private,所以不能直接使用,要在類中去添加方法。如下所示:
public void SetMaxSpeed(int temp) // 得到數(shù)據(jù) { maxSpeed = temp; } public int GetMaxSpeed() // 輸出數(shù)據(jù) { return maxSpeed; }
這樣就可以使用maxSpeed了,我還在類中寫了一個輸出方法,方便我們輸出相關(guān)信息。
類的使用就可以體現(xiàn)出封裝,將我們的一些方法寫在一個程序中,在通過主程序去調(diào)用這個類中的方法,從而讓主程序顯的更加簡潔明了。
構(gòu)造函數(shù):
構(gòu)造函數(shù)是類中一個特殊的成員函數(shù),構(gòu)造函數(shù)的定義沒有返回類型。定義構(gòu)造函數(shù)后,每在主程序中創(chuàng)建一個新的對象就會使用這個構(gòu)造函數(shù)。如下所示:
public Car() { Console.WriteLine("我是構(gòu)造函數(shù)"); }
默認的構(gòu)造函數(shù)是沒有參數(shù)的,如果加上參數(shù)就可以為你的成員進行初始化,如下所示:
public Car(int speedA) { speed = speedA; Console.WriteLine("對象創(chuàng)建成功,速度默認為 = {0}", speedA); }
屬性:
屬性主要用于外部來訪問和使用內(nèi)部的私有成員變量,例如我們上面要使用maxSpeed變量,要定義兩個方法才能使用這個變量,而使用屬性就可以只定義一個方法就可以使用了。如下所示:
public int MaxSpeed { get { return maxSpeed; } set // 這里默認值是value { maxSpeed = value; } }
car1.MaxSpeed = 325; Console.WriteLine(car1.MaxSpeed);
今日小題:編寫一個程序,倒序輸出一個數(shù),不輸出這個數(shù)開始的0和結(jié)束的0,例如00520520 ---> 25025
我們直接從輸入的最后一個數(shù)開始,利用求余運算--"%",來得到最后一個數(shù),給他一個判斷看他是否為0,如果不為0就讓他輸出后續(xù)數(shù)字,設(shè)定一個標志位開始為false,判斷最后一個數(shù)是否為0,為0則不管,不為0則標志位為true,循環(huán)條件為p != 0,循環(huán)的最后讓p = p / 10;就使這個數(shù)不斷減少一位,少到為0時就表示前面的數(shù)都是0了,就不用管了。
int p = Convert.ToInt32(Console.ReadLine());
bool temp = false;
while(p != 0)
{
int n = p % 10;
if(temp == false)
{
if(n != 0)
{
Console.Write(n);
temp = true;
}
}
else
{
Console.Write(n);
}
p = p / 10;
}
由于輸出是一個數(shù)一個數(shù)輸出,所以輸出語句用Write避免換行。