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