- 類的默認(rèn)訪問標(biāo)識(shí)符是 internal,成員的默認(rèn)訪問標(biāo)識(shí)符是 private
- 1.類的 構(gòu)造函數(shù) 是類的一個(gè)特殊的成員函數(shù),當(dāng)創(chuàng)建類的新對(duì)象時(shí)執(zhí)行。
構(gòu)造函數(shù)的名稱與類的名稱完全相同,它沒有任何返回類型
using System;
namespace LineApplication
{
class Line
{
private double length; // 線條的長度
public Line()
{
Console.WriteLine("對(duì)象已創(chuàng)建");
}
public void setLength( double len )
{
length = len;
}
public double getLength()
{
return length;
}
static void Main(string[] args)
{
Line line = new Line();
// 設(shè)置線條長度
line.setLength(6.0);
Console.WriteLine("線條的長度: {0}", line.getLength());
Console.ReadKey();
}
}
}
結(jié)果如下:
對(duì)象已創(chuàng)建
線條的長度: 6
- 2.默認(rèn)的構(gòu)造函數(shù)沒有任何參數(shù)。但是如果您需要一個(gè)帶有參數(shù)的構(gòu)造函數(shù)可以有參數(shù),這種構(gòu)造函數(shù)叫做參數(shù)化構(gòu)造函數(shù)。這種技術(shù)可以幫助您在創(chuàng)建對(duì)象的同時(shí)給對(duì)象賦初始值,具體請(qǐng)看下面實(shí)例:
using System;
namespace LineApplication
{
class Line
{
private double length; // 線條的長度
public Line(double len) // 參數(shù)化構(gòu)造函數(shù)
{
Console.WriteLine("對(duì)象已創(chuàng)建,length = {0}", len);
length = len;
}
public void setLength( double len )
{
length = len;
}
public double getLength()
{
return length;
}
static void Main(string[] args)
{
Line line = new Line(10.0);
Console.WriteLine("線條的長度: {0}", line.getLength());
// 設(shè)置線條長度
line.setLength(6.0);
Console.WriteLine("線條的長度: {0}", line.getLength());
Console.ReadKey();
}
}
}
結(jié)果是:
對(duì)象已創(chuàng)建,length = 10
線條的長度: 10
線條的長度: 6
- 3.類的 析構(gòu)函數(shù) 是類的一個(gè)特殊的成員函數(shù),當(dāng)類的對(duì)象超出范圍時(shí)執(zhí)行。
析構(gòu)函數(shù)的名稱是在類的名稱前加上一個(gè)波浪形(~)作為前綴,它不返回值,也不帶任何參數(shù)。
析構(gòu)函數(shù)用于在結(jié)束程序(比如關(guān)閉文件、釋放內(nèi)存等)之前釋放資源。析構(gòu)函數(shù)不能繼承或重載。
下面的實(shí)例說明了析構(gòu)函數(shù)的概念:
using System;
namespace LineApplication
{
class Line
{
private double length; // 線條的長度
public Line() // 構(gòu)造函數(shù)
{
Console.WriteLine("對(duì)象已創(chuàng)建");
}
~Line() //析構(gòu)函數(shù)
{
Console.WriteLine("對(duì)象已刪除");
}
public void setLength( double len )
{
length = len;
}
public double getLength()
{
return length;
}
static void Main(string[] args)
{
Line line = new Line();
// 設(shè)置線條長度
line.setLength(6.0);
Console.WriteLine("線條的長度: {0}", line.getLength());
}
}
}
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:
對(duì)象已創(chuàng)建
線條的長度: 6
對(duì)象已刪除
- 4.類的靜態(tài)成員
我們可以使用 static 關(guān)鍵字把類成員定義為靜態(tài)的。當(dāng)我們聲明一個(gè)類成員為靜態(tài)時(shí),意味著無論有多少個(gè)類的對(duì)象被創(chuàng)建,只會(huì)有一個(gè)該靜態(tài)成員的副本。
關(guān)鍵字 static 意味著類中只有一個(gè)該成員的實(shí)例。靜態(tài)變量用于定義常量,因?yàn)樗鼈兊闹悼梢酝ㄟ^直接調(diào)用類而不需要?jiǎng)?chuàng)建類的實(shí)例來獲取。靜態(tài)變量可在成員函數(shù)或類的定義外部進(jìn)行初始化。您也可以在類的定義內(nèi)部初始化靜態(tài)變量。
下面的實(shí)例演示了靜態(tài)變量的用法:
using System;
namespace StaticVarApplication
{
class StaticVar
{
public static int num;
public void count()
{
num++;
}
public int getNum()
{
return num;
}
}
class StaticTester
{
static void Main(string[] args)
{
StaticVar s1 = new StaticVar();
StaticVar s2 = new StaticVar();
s1.count();
s1.count();
s1.count();
s2.count();
s2.count();
s2.count();
Console.WriteLine("s1 的變量 num: {0}", s1.getNum());
Console.WriteLine("s2 的變量 num: {0}", s2.getNum());
Console.ReadKey();
}
}
}
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:
s1 的變量 num: 6
s2 的變量 num: 6
您也可以把一個(gè)成員函數(shù)聲明為 static。這樣的函數(shù)只能訪問靜態(tài)變量。靜態(tài)函數(shù)在對(duì)象被創(chuàng)建之前就已經(jīng)存在。下面的實(shí)例演示了靜態(tài)函數(shù)的用法:
using System;
namespace StaticVarApplication
{
class StaticVar
{
public static int num;
public void count()
{
num++;
}
public static int getNum()
{
return num;
}
}
class StaticTester
{
static void Main(string[] args)
{
StaticVar s = new StaticVar();
s.count();
s.count();
s.count();
Console.WriteLine("變量 num: {0}", StaticVar.getNum());
Console.ReadKey();
}
}
}
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:
變量 num: 3