程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#高級(二)類

C#高級(二)類

編輯:關於C#

一、類的概述

類,是創建對象的模板,每個對象都包含數據,並且提供了處理和訪問數據的方法。換言之,類,定 義了每個對象,也就是“實例”包含什麼數據和功能。

比如我們定義一個“醫生”類,並且實例化一個。我們看下面的代碼:

using System;
namespace gosoa.com.cn
{
public class Doctor
{
public Doctor(){}
public Doctor(string name,byte age)
{
this._name=name;
this._age=age;
}
private string _name;
private byte _age;
public string Name
{
get{return this._name;}
set{this._name=value;}
}
public byte Age
{
get{return this._age;}
set{this._age=value; }
}
public string doSth()
{
return "我會給人治病喔~~";
}
public static string doAnth()
{
return "執行的另一個靜態方法";
}
}
public class OneDoctor
{
static void Main()
{
Doctor dc=new Doctor();
dc.Name="李四";
dc.Age=25;
Doctor dc2=new Doctor("張三",35);
Console.WriteLine(dc.Name);
Console.WriteLine(dc.Age);
Console.WriteLine(dc2.Name);
Console.WriteLine(dc2.Age);
Console.WriteLine(dc.doSth());
Console.WriteLine(Doctor.doAnth());
}
}
}

在這個例子中,public class Doctor 便是聲明了一個類。_name和_age是其兩個屬性。doSth()是其 的一個方法(即對象的行為)。 Doctor dc=new Doctor() 用來實例化了一個Doctor類,也就類似實例化 了一個對象,產生了一個新醫生。Doctor dc2=new Doctor("張三",35);是實例化的另外一個類,也就是 另外一個醫生。

在Doctor類中,public Doctor(){} public Doctor(string name,byte age) 這兩個方法叫做 構造 函數。是用來初始化類的,在每個類被實例化的時候,會自動調用。

public string Name
        {
           get{return this._name;}
           set{this._name=value;}
        }

這段代碼是用來設置和獲取類的屬性的。也就類似java中的 getName 和 setName 方法。只是在C#中 這變得更容易了。

注意一點:類是存儲在托管堆上的引用類型。

二、方法

1、 方法概述

方法和C語言中的 函數共享同一個理念。一直以來,我們在用的Main()方法就是個例子。還有上例中 public string doSth() 也是一個方法。其中,public是 類的修飾符,string是方法的返回值,也可以 沒有返回值,即 void ,doSth是方法名稱。()括號必須有,在括號中可以有參數,如Doctor類的構造函 數 public Doctor(string name,byte age) 就有兩個參數。方法體則必須用一對{}括起來。

方法的調用,則需要先實例化類,然後調用類的某個方法。上例中Doctor dc=new Doctor();來實例化 了類,然後 dc.doSth() 就是調用了Doctor類的方法。

如果方法是靜態的,即 static,則不需要實例化類,直接使用 類名.方法名 就可以調用了。如上例 中 Console.WriteLine(Doctor.doAnth()); 即是直接調用了靜態的doAnth方法。

2、方法的參數

參數可以通過引用或者值傳遞 給方法。具體有什麼區別呢?

我們來看個例子。

using System;
namespace gosoa.com.cn
{
public class OneDoctor
{
static void FunctionTest(int [] arr, int x)
{
arr[0]=100;
x=10;
}
static void Main()
{
int [] arrTemp={0,1,2,3,4};
int y=30;
Console.WriteLine(arrTemp[0]);
Console.WriteLine(y);
FunctionTest(arrTemp, y);
Console.WriteLine(arrTemp[0]);
Console.WriteLine(y);
}
}
}

本例的輸出結果是0,30,100,30 因為數組是引用類型,在調用方法前後,引用類型的修改會保留下 來,而值類型的修改不會保留下來。

3、ref 參數。

我們把 上例中的方法修改為 static void FunctionTest(int [] arr, ref int x) 這樣,調用的時 候 也加上 ref 即:functionTest(arrTemp, ref y); 執行後的結果就是0,30,100,10。

ref 關鍵字是強迫參數通過引用傳遞。

注意:在調用有ref參數的方法時,必須將參數要傳遞的參數提前初始化。但在調用out參數的方法時 ,就不必提前初始化。

4、out 參數

在上例中,我們稍作修改。

static void FunctionTest(out int x)
{
x=100;
}
static void Main()
{
int y;
FunctionTest(out y);
Console.WriteLine(y);
}

在Maim()函數中調用FunctionTest之前,y並沒有初始化。但其輸出結果確實100;因為這樣屬於引用 傳遞,值的修改會被保留下來。

5、方法的重載

所謂重載就是指 方法名相同,而參數不同(參數類型,參數個數)看下面一個例子

using System;
namespace gosoa.com.cn
{
public class test
{
static int FunctionTest(int x)
{
return x+100;
}
static string FunctionTest(string str)
{
return str;
}
static int FunctionTest(int x,int y)
{
return x+y;
}
static void Main()
{
Console.WriteLine(FunctionTest(10) );
Console.WriteLine(FunctionTest("gosoa.com.cn") );
Console.WriteLine(FunctionTest(5,20));
}
}
}

在這裡例子中,有三個方法functionTest 其參數都不一樣。在調用的時候,系統會根據傳遞的參數自 動選擇調用哪個方法的。這就是方法的重載。

在這裡注意,重載的條件是,必須參數類型不同,或者參數個數不同。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved