C#速成
系統(tǒng)
3239 0
原文出處:http:
//
www.codeguru.com/cs_syntax/CSharp.html
原作者:AishaIkram
在一些術(shù)語(yǔ)上我盡量做到與MSDN的中文資料所述術(shù)語(yǔ)保持一致
使用環(huán)境:.NET,C#,WinXP,Win
2000
緒論
C#是這樣的一種語(yǔ)言,具有C
++
的特點(diǎn),象Java一樣的編程風(fēng)格,并且象Basic一樣的快速開(kāi)發(fā)模型。如果你已經(jīng)知道了C
++
,本文會(huì)在不到一個(gè)小時(shí)的時(shí)間內(nèi)讓你迅速掌握C#的語(yǔ)法。熟悉Java的括會(huì)更好,因?yàn)镴ava的程序結(jié)構(gòu)、打包(Packages)和垃圾收集的概念有助于你更快的了解C#。因此在討論C#的構(gòu)造時(shí),我會(huì)假定你了解C
++
。
本文會(huì)討論C#語(yǔ)言的構(gòu)造與特點(diǎn),同時(shí)會(huì)采取簡(jiǎn)潔的和你能理解的方式使用些代碼示例,我們會(huì)盡量讓你能稍微看看這些代碼就能理解這些概念。
注意:本文不是為C#高手(C#gurus)所寫(xiě).這是針對(duì)在C#學(xué)習(xí)上還是初學(xué)者的文章。
下面是將要討論的C#問(wèn)題的目錄:
程序結(jié)構(gòu)
命名空間
數(shù)據(jù)類(lèi)型
變量
運(yùn)算符和表達(dá)式
枚舉
語(yǔ)句(Statements)
類(lèi)(Classes)和結(jié)構(gòu)(Structs)
修飾符(Modifiers)
屬性(Properties)
接口(Interfaces)
方法參數(shù)(FunctionParameters)
數(shù)組(Arrays)
索引器(Indexers)
裝箱及拆箱操作
委托(Delegates)
繼承和多態(tài)
下面的內(nèi)容將不會(huì)在被討論之列:
C
++
與C#誰(shuí)更通用
諸如垃圾回收、線程以及文件處理等概念
數(shù)據(jù)的類(lèi)型轉(zhuǎn)換
異常處理
.NET庫(kù)
-------------------
程序結(jié)構(gòu)
-------------------
這一點(diǎn)象C
++
,C#是一種對(duì)大小寫(xiě)字母敏感的語(yǔ)言,分號(hào)“;”是語(yǔ)句間的分隔符。與C
++
不同的是,C#當(dāng)中聲明代碼文件(頭文件)與實(shí)現(xiàn)代碼文件(cpp文件)不是獨(dú)立存在的,所有代碼(類(lèi)聲明和類(lèi)實(shí)現(xiàn))都位于一個(gè)擴(kuò)展名為cs的文件內(nèi)。
讓我們瞧瞧C#當(dāng)中的Helloworld程序是怎樣的。
using
System;
namespace
MyNameSpace
{
class
HelloWorld
{
static
void
Main(
string
[]args)
{
Console.WriteLine(
"
HelloWorld
"
);
}
}
}
在C#當(dāng)中的每樣?xùn)|西都被封裝到一個(gè)類(lèi)中,C#的類(lèi)又被封裝到一個(gè)命名空間當(dāng)中(就象一個(gè)文件夾中的文件)。類(lèi)似于C
++
,main方法是你的程序的入口點(diǎn)。C
++
的main函數(shù)調(diào)用名稱(chēng)是
"
main
"
,而C#的main函數(shù)是以大寫(xiě)字母M為起點(diǎn)的名稱(chēng)是
"
Main
"
。
沒(méi)有必要把分號(hào)分隔符放在類(lèi)語(yǔ)句塊或者結(jié)構(gòu)定義語(yǔ)句塊后。這在C
++
當(dāng)中被要求,但在C#當(dāng)中卻不是。
-------------------
命名空間
-------------------
每一個(gè)類(lèi)都被包裝進(jìn)一個(gè)命名空間。命名空間的概念與C
++
的完全相同,但在C#當(dāng)中使用命名空間的頻率較C
++
還高。你可以使用點(diǎn)限定符(dotqulifier)訪問(wèn)一個(gè)類(lèi)。在上面的helloworld程序當(dāng)中MyNameSpace就是一個(gè)命名空間。
現(xiàn)在思考這樣的一個(gè)問(wèn)題,你想從某些別的類(lèi)的命名空間當(dāng)中來(lái)訪問(wèn)HelloWorld這個(gè)類(lèi)該如何操作。
這有一個(gè)例子:
using
System;
namespace
AnotherNameSpace
{
class
AnotherClass
{
public
void
Func()
{
Console.WriteLine(
"
HelloWorld
"
);
}
}
}
現(xiàn)在,從你的HelloWorld類(lèi)里你能象這樣去訪問(wèn)上面的這個(gè)AnotherNameSpace的命名空間:
using
System;
using
AnotherNameSpace;
//
youwilladdthisusingstatement
namespace
MyNameSpace
{
class
HelloWorld
{
static
void
Main(
string
[]args)
{
AnotherClassobj
=
new
AnotherClass();
obj.Func();
}
}
}
在.NET庫(kù)當(dāng)中,System是位于頂層的命名空間,別的命名空間都存在這個(gè)命名空間之下。默認(rèn)狀態(tài)下,存在一個(gè)全局的命名空間,因此一個(gè)在命名空間外定義的類(lèi)將直接在這個(gè)全局命名空間之下;因此,你能在沒(méi)有任何點(diǎn)限定符的情況下訪問(wèn)這個(gè)類(lèi)。
你也可以象下面這樣定義嵌套的命名空間。
Using
C
++
當(dāng)中的
"
#include
"
指示被C#的
"
using
"
關(guān)鍵字取代,它后面跟著一個(gè)命名空間的名字。正如上面的
"
usingSystem
"
。
"
System
"
是別的所有被封裝的命名空間和類(lèi)中最底層的命名空間。所有對(duì)象的基類(lèi)都是System命名空間內(nèi)的Object類(lèi)派生的。
-------------------
變量
-------------------
除以下并別外,C#當(dāng)中的變量幾乎與C
++
同:
與C
++
不同,C#變量被訪問(wèn)之前必須被初始化;否則編譯時(shí)會(huì)報(bào)錯(cuò)。因此,訪問(wèn)一個(gè)未初始化變量是不可能的事。
C#中你不會(huì)訪問(wèn)到一個(gè)不確定的指針。(譯者注:嚴(yán)格說(shuō)起來(lái)C#已經(jīng)把指針概念異化,限制更嚴(yán)格。所以有些資料上會(huì)說(shuō)C#取消了指針概念)
一個(gè)超出數(shù)組邊界的表達(dá)式是不可訪問(wèn)的。
C#中沒(méi)有全局的的變量或全局函數(shù),全局方式的操作是通過(guò)靜態(tài)函數(shù)和靜態(tài)變量來(lái)實(shí)現(xiàn)的。
-------------------
數(shù)據(jù)類(lèi)型
-------------------
所有C#數(shù)據(jù)類(lèi)型都派生自基類(lèi)Object。這里有兩類(lèi)數(shù)據(jù)類(lèi)型:
基本型
/
內(nèi)置型用戶自定義型
下面一個(gè)C#內(nèi)置類(lèi)型列表:
類(lèi)型字節(jié)數(shù)解釋
byte
1
無(wú)符號(hào)字節(jié)型
sbyte
1
有符號(hào)字節(jié)型
short
2
有符號(hào)短字節(jié)型
ushort
2
無(wú)符號(hào)短字節(jié)型
int
4
有符號(hào)整型
uint
4
無(wú)符號(hào)整型
long
8
有符號(hào)長(zhǎng)整型
ulong
8
無(wú)符號(hào)長(zhǎng)整型
float
4
浮點(diǎn)數(shù)
double
8
雙精度數(shù)
decimal
8
固定精度數(shù)
string
unicode字串型
char
unicode字符型
bool
真假布爾型
注意:C#當(dāng)中的類(lèi)型范圍與C
++
有所不同;例如,C
++
的long型是4個(gè)字節(jié),而在C#當(dāng)中是8個(gè)字節(jié)。同樣地,bool型和string型都不同于C
++
。bool型只接受true和false兩種值。不接受任何整數(shù)類(lèi)型。
用戶定義類(lèi)型包括:
類(lèi)類(lèi)型(
class
)
結(jié)構(gòu)類(lèi)型(
struct
)
接口類(lèi)型(
interface
)
數(shù)據(jù)類(lèi)型的內(nèi)存分配形式的不同又把它們分成了兩種類(lèi)型:
值類(lèi)型(valueTypes)
引用類(lèi)型(ReferenceTypes)
值類(lèi)型:
值類(lèi)型數(shù)據(jù)在棧中分配。他們包括:所有基本或內(nèi)置類(lèi)型(不包括string類(lèi)型)、結(jié)構(gòu)類(lèi)型、枚舉類(lèi)型(
enum
type)
引用類(lèi)型:
引用類(lèi)型在堆中分配,當(dāng)它們不再被使用時(shí)將被垃圾收集。它們使用new運(yùn)算符來(lái)創(chuàng)建,對(duì)這些類(lèi)型而言,不存在C
++
當(dāng)中的delete操作符,根本不同于C
++
會(huì)顯式使用delete這個(gè)運(yùn)算符去釋放創(chuàng)建的這個(gè)類(lèi)型。C#中,通過(guò)垃圾收集器,這些類(lèi)型會(huì)自動(dòng)被收集處理。
引用類(lèi)型包括:類(lèi)類(lèi)型、接口類(lèi)型、象數(shù)組這樣的集合類(lèi)型類(lèi)型、字串類(lèi)型、枚舉類(lèi)型
枚舉類(lèi)型與C
++
當(dāng)中的概念非常相似。它們都通過(guò)一個(gè)enum關(guān)鍵字來(lái)定義。
示例:
enum
Weekdays
{
Saturday,Sunday,Monday,Tuesday,Wednesday,Thursday,Friday
}
類(lèi)類(lèi)型與結(jié)構(gòu)類(lèi)型的比較
除了在內(nèi)存分配形式上外,類(lèi)與結(jié)構(gòu)的概念完全與C
++
相同。類(lèi)的對(duì)象被分配在堆中,并且通過(guò)new來(lái)創(chuàng)建,結(jié)構(gòu)也是被new創(chuàng)建但卻被分配在棧當(dāng)中。C#當(dāng)中,結(jié)構(gòu)型適于快速訪問(wèn)和擁有少量成員的數(shù)據(jù)類(lèi)型。如果涉及量較多,你應(yīng)該創(chuàng)建一個(gè)類(lèi)來(lái)實(shí)現(xiàn)他。
(譯者注:這與堆和棧內(nèi)存分配結(jié)構(gòu)的特點(diǎn)有關(guān)。簡(jiǎn)而言之,棧是一種順序分配的內(nèi)存;堆是不一定是連續(xù)的內(nèi)存空間。具體內(nèi)容需要大家參閱相關(guān)資料)
示例:
struct
Date
{
int
day;
int
month;
int
year;
}
class
Date
{
int
day;
int
month;
int
year;
string
weekday;
string
monthName;
public
int
GetDay()
{
return
day;
}
public
int
GetMonth()
{
return
month;
}
public
int
GetYear()
{
return
year;
}
public
void
SetDay(
int
Day)
{
day
=
Day;
}
public
void
SetMonth(
int
Month)
{
month
=
Month;
}
public
void
SetYear(
int
Year)
{
year
=
Year;
}
public
bool
IsLeapYear()
{
return
(year
/
4
==
0
);
}
public
void
SetDate(
int
day,
int
month,
int
year)
{
}
}
-------------------
屬性
-------------------
如果你熟悉C
++
面象對(duì)象的方式,你就一定有一個(gè)屬性的概念。在上面示例當(dāng)中,以C
++
的觀點(diǎn)來(lái)看,Data類(lèi)的屬性就是day、month和year。用C#方式,你可以把它們寫(xiě)成Get和Set方法。C#提供了一個(gè)更方便、簡(jiǎn)單、直接的方式來(lái)訪問(wèn)屬性。
因此上面的類(lèi)可以被寫(xiě)成:
using
System;
class
Date
{
public
int
Day
{
get
{
return
day;
}
set
{
http://www.cnblogs.com/Images/OutliningIndicators/InBloc
分享到:
C#速成
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
評(píng)論