C#語言初級入門介紹

來源:互聯網
上載者:User


本文的目的在於為尚未接觸過C#的程式員介紹這種程式設計語言。不論你以前是否用過C/C++或者Java,都可以從本文開始學習C#。本文的唯一假定是你具有某種類型的編程知識(如具有物件導向編程的經驗則更好,但並非必須),並擁有某種類型的C#編譯器。
最簡單的C#程式

首先我們來看標準的Hello World程式。用文字編輯器建立一個新檔案HelloWorld.cs,把下面的代碼放入這個檔案:

// 第一個c#程式

class HelloWorld {
static void Main() {
System.Console.WriteLine("Hello World!");
}
}

現在,在DOS命令視窗進入儲存HelloWorld.cs的目錄,然後執行:

csc HelloWorld.cs

該命令編譯原始碼並產生HelloWorld.exe檔案。運行這個執行檔案就可以看到:
Hello World!

下面我們來分析一下這個例子。第一行代碼是一行注釋,由“//”開始。和C/C++以及Java一樣,“//”告訴編譯器忽略該行直至結尾為止的內容。C#中的另外一種注釋方法是塊注釋。塊注釋由“”結束。

程式中第二個重要的地方是第四行Main()方法的聲明(static void Mian(){)。每一個C#程式都包含一個Main方法,它是程式執行的起點和終點。另外還請注意,HelloWorld類的Main()方法定義成了靜態(static)方法。程式的Main方法永遠不會是全域的,這意味著Main方法必須包含在類裡面,如本例中Main()是在類HelloWorld裡面(Main方法也可以包含到結構裡面,但一般它總是在類裡面)。

程式中最後一個關鍵的地方是向控制台輸出文本的代碼,即“System.Console.WriteLine("Hello World!");”。WriteLine是一個方法,定義於Console類。WriteLine()把文本輸出到標準輸出裝置並換行。Console類包含在System名稱空間(類的集合)裡面。如果你想避免用“System.Console”的方式來指出Console類的全稱,可以在檔案的開頭加上“using System;”這行代碼,以後就可以直接寫出“Console.WriteLine("Hello World!");”。

下面這個例子示範如何建立和使用使用者定義的類以及如何建立動態連結程式庫。利用文字編輯器建立兩個檔案。第一個是Apple.cs,內容如下:
public class Apple {

private string variety = "";

public Apple(string appleVariety) {
this.variety = appleVariety;
}

public void outputVariety() {
System.Console.WriteLine(variety);
}

}

第二個檔案是Example2.cs,內容如下:

class Example2 {

static void Main() {
Apple mac = new Apple("Macintosh ");
Apple gra = new Apple("Granny Smith");
Apple cor = new Apple("Cortland");
mac.outputVariety();
gra.outputVariety();
cor.outputVariety();
}
}

首先,我們定義了一個新的使用者定義類,名字為Apple。雖然Apple類並不一定要放到獨立的檔案中,但把每個類都放到自己獨立的檔案中是一個好的物件導向編程習慣,有助於簡化組織和管理。我們為Apple類的聲明加上了public修飾符(public class Apple),這樣其他類就可以建立Apple類的執行個體。

下一行代碼定義了執行個體變數variety。使用了修飾符private之後,只有在Apple類的內部才可以直接存取variety變數。這是一種常見的物件導向編程習慣,稱為封裝。封裝之後,對象的工作細節對於對象的使用者來說就隱藏不可見了。你現在正使用的鍵盤就是封裝在現實世界中一個很好的例子。我們並不完全瞭解鍵擊如何發送到控制器(我們之中的大多數都不知道),但只要理解它的介面如何運作就可以了。例如我們知道,開啟文字編輯器,按下鍵盤上的“&”鍵,“&”字元就會出現在螢幕上。如果每一個人都必須瞭解鍵盤的工作細節而不是只要瞭解它的介面,我們之中不會有很多人使用它。

接下來的三行代碼是:

public Apple(string appleVariety) {
this.variety = variety;
}

這三行代碼定義了Apple類的建構函式。類的建構函式類似一個描述如何建立類執行個體的藍圖。我們能夠很容易地將建構函式和類裡面的其他方法區分開來,因為建構函式總是和類具有相同的名字。在本例中,類Apple的建構函式有一個字串參數,這個參數值隨後被儲存到執行個體變數variety。

Apple類的最後一個方法是outputVariety()。這個方法為訪問執行個體變數提供了介面,所以稱為存取方法(Accessor Method)。

下面我們來看Example2類。這個例子與前文例子的區別在於要建立並使用使用者定義類Apple的執行個體。我們用new操作符建立了三個Apple類的執行個體。建立類的執行個體時,我們無需顯式地調用類的建構函式,new操作符將自動為我們調用類的建構函式。建立了三個Apple類的對象之後,我們依次調用這三個對象的outputVariety方法,由outputVariety方法輸出這三個對象裡variety的值。

下面我們來編譯和運行這個例子。首先我們要把Apple類編譯成動態連結程式庫,命令如下:

csc /target:library Apple.cs

/target:library表示不要建立執行檔案,而是建立一個.dll檔案(即動態連結程式庫)。所以,上面的命令將產生一個Apple.dll檔案。

接下來我們編譯Example2.cs,編譯命令如下所示:

csc /reference:Apple.dll Example2.cs

現在我們得到了執行檔案Example2.exe。執行這個檔案可以在控制台上看到如下輸出:

Macintosh
Granny Smith
Cortland

在這最後一個例子中,我們來看看C#的抽象和多態性。首先我們來定義一下這兩個新的術語。抽象(Abstract)通過從多個對象提取出公用部分並把它們併入單獨的抽象類別中實現。在本例中我們將建立一個抽象類別Shape(形狀)。每一個形狀都擁有返回其顏色的方法,不論是正方形還是圓形、長方形,返回顏色的方法總是相同的,因此這個方法可以提取出來放入父類Shape。這樣,如果我們有10個不同的形狀需要有返回顏色的方法,現在只需在父類中建立一個方法。可以看到使用抽象使得代碼更加簡短。

  在物件導向編程領域中,多態性(Polymorphism)是對象或者方法根據類的不同而作出不同行為的能力。在下面這個例子中,抽象類別Shape有一個getArea()方法,針對不同的形狀(圓形、正方形或者長方形)它具有不同的功能。

   下面是代碼:

public abstract class Shape {
protected string color;
public Shape(string color) {
this.color = color;
}
public string getColor() {
return color;
}
public abstract double getArea();
}

public class Circle : Shape {
private double radius;
public Circle(string color, double radius) : base(color) {
this.radius = radius;
}
public override double getArea() {
return System.Math.PI * radius * radius;
}
}

public class Square : Shape {
private double sideLen;
public Square(string color, double sideLen) : base(color) {
this.sideLen = sideLen;
}
public override double getArea() {
return sideLen * sideLen;
}
}

public class Example3
{
static void Main()
{
Shape myCircle = new Circle("orange", 3);
Shape myRectangle = new Rectangle("red", 8, 4);
Shape mySquare = new Square("green", 4);
System.Console.WriteLine("圓的顏色是" + myCircle.getColor()
+ "它的面積是" + myCircle.getArea() + ".");
System.Console.WriteLine("長方形的顏色是" + myRectangle.getColor()
+ "它的面積是" + myRectangle.getArea() + ".");
System.Console.WriteLine("正方形的顏色是" + mySquare.getColor()
+ "它的面積是" + mySquare.getArea() + ".");
}
}

我們建立的第一個類是Shape。這是一個抽象類別,因為我們不想建立這個類的執行個體,我們要建立的是它的衍生類別的執行個體。我們從所有的形狀(圓、長方形、正方形)提取出共同特徵到Shape類。Shape類有一個執行個體變數color,它的變數聲明中帶有protected修飾符。protected修飾符表示這個變數只能在類的內部或者該類的衍生類別中訪問。緊接這個變數聲明的就是Shape類的建構函式和存取方法getColor(),這兩個方法都沒有什麼新的東西。最後一個方法getArea()加上了abstract修飾符,這是因為每一種不同的形狀都有不同的面積計算方法,因此這個方法必須由各種形狀自己來定義。

  接下來的三個類Circle、Rectangle和Square都從Shape類派生,它們都具有Shape所描述的特徵。這可以從它們的定義中看出來,它們的聲明中都帶有“public class:Shape {”,這個“: Shape”就表示當前的類從Shape類派生。由於這三個類都從Shape派生,它們自動擁有Shape中定義的所有public或者protected執行個體變數,即Circle、 Rectangle和Square包含了執行個體變數color。

  每一個Sharp的衍生類別都有自己的建構函式,負責調用父類Shape的建構函式設定公用的執行個體變數(color)以及設定自己特有的執行個體變數。例如“public Circle(string color, double radius) : base(color)”這個語句中,“: base(color)”就表示用參數color調用父類的建構函式。

  最後我們來看一下getArea()方法,它是一個多態性的示範。所有形狀都有getArea()方法,但是根據對象是圓、長方形還是正方形,具體調用的方法也不同。

  要運行這個例子,先把所有檔案儲存到同一目錄,然後執行下面的命令:

csc /target:library /out:Shapes.dll
Shapes.cs Circle.cs Rectangle.cs Square.cs

   然後執行:

csc /reference:Shapes.dll Example3.cs

   現在,如果我們運行Example3.exe,將得到如下輸出:

圓的顏色是orange它的面積是28.274333882308138.
正方形的顏色是green它的面積是16.
長方形的顏色是red 它的面積是32.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.