C#速成(之二) (轉)
-------------------
資料型別
-------------------
所有資料型別都派生自基類。這裡有兩類資料型別:
基本型/內建型 自定義型
下面一個C#內建型別列表:
注意:C#當中的型別範圍與C++有所不同;例如,C++的long型是4個位元組,而在C#當中是8個位元組。同樣地,bool型和string型都不同於C++。bool型只接受true和false兩種值。不接受任何整數型別。
使用者定義型別包括:
類型別(class)
結構型別(struct)
介面型別(interface)
資料型別的分配形式的不同又把它們分成了兩種型別:
值型別(Value Types)
引用型別(Reference Types)
值型別:
值型別資料在棧中分配。他們包括:所有基本或內建型別(不包括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 {
day = value;
}
}
int day;
public int Month{
get {
return month;
}
set {
month = value;
}
}
int month;
public int Year{
get {
return year;
}
set {
year = value;
}
}
int year;
public bool IsLeapYear(int year)
{
return year%4== 0 ? true: false;
}
public void SetDate (int day, int month, int year)
{
this.day = day;
this.month = month;
this.year = year;
}
}
你可在這裡得到並設定這些屬性:
class User
{
public static void Main()
{
Date date = new Date();
date.Day = 27;
date.Month = 6;
date.Year = ;
Console.WriteLine("Date: {0}/{1}/{2}", date.Day,
date.Month,
date.Year);
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-984616/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C#速成(之一) (轉)C#
- C#速成(之三) (轉)C#
- C#速成(之四) (轉)C#
- C#速成(之五)全文完 (轉)C#
- (X)Emacs 速成(轉)Mac
- 轉:SAP專案管理系統速成專案管理
- Informix命令之二--dbexport (轉帖)ORMExport
- python速成Python
- USB開發速成-我最真實的經驗!(轉)
- CTI的典型應用之二 (轉)
- Delphi 常用文件資料之二 (轉)
- 維修電腦知識之二 (轉)
- RxJS速成 (上)JS
- RxJS速成 (下)JS
- 玩轉cordova之二--增強的webviewWebView
- SCJP認證套題解析之二 (轉)
- 動態質量管理之二(轉載)
- 歪批IT之二十六:簡訊(轉)
- DirectShow系列講座之二——Filter原理 (轉)Filter
- Swift速成:捕獲列表Swift
- Windows 到 Linux 之旅:第 2 部分. 控制檯速成班(轉)WindowsLinux
- Beginner with C# (轉)C#
- WHAT IS C# (轉)C#
- 歪批IT之二十:資訊時代E言堂(轉)
- 水木--給Linux新手 [系列之二] (轉)Linux
- Windows未公開函式揭密——之二 (轉)Windows函式
- 使用Shell.Application技術之二 (轉)APP
- C#程式設計利器之二:結構與列舉(Structure and enumeration)C#程式設計Struct
- SQL 語法速成手冊SQL
- [譯] 密碼學速成課密碼學
- 視覺化速成指南-大小視覺化
- iOS 6 Objective-C 速成iOSObject
- C#:Dictionary轉DataTableC#
- 可怕的 C# (轉)C#
- Beginner with c# 5 (轉)C#
- Beginner with c# 6 (轉)C#
- Beginner with c# 2 (轉)C#
- Beginner with c# 3 (轉)C#