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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python速成Python
- 解鎖本地生活轉化鏈路,促進快速成交!
- 玩轉 Cgroup 系列之二:使用 CPUShares 管理 Cgroup
- 用 PHP 玩轉程式之二 — 多程式 PHPServerPHPServer
- RxJS速成 (下)JS
- RxJS速成 (上)JS
- c# svg轉Bitmap Bitmap轉ImageSourceC#SVG
- C# 操作xml(轉)C#XML
- C#:Dictionary轉DataTableC#
- C# PDF轉圖片C#
- C# 型別轉換C#型別
- c#列舉轉換C#
- C#將html轉pdfC#HTML
- C# 將HTML轉為XMLC#HTMLXML
- C# 將PDF轉為ExcelC#Excel
- C# 將Excel轉為XMLC#ExcelXML
- C# 將OFD轉為PDFC#
- C#中JSON轉換類C#JSON
- C#中漢字轉拼音C#
- 瞭解下C# 型別轉換C#型別
- C# 時間戳轉時間C#時間戳
- [轉][C#][WPF] 遮罩效果小試C#遮罩
- C#漢字轉漢語拼音C#
- C# TTS-文字轉語音C#TTS
- C# bytes[]和sting互相轉換C#
- 玩轉大資料系列之二:資料分析與處理大資料
- Y 分鐘速成 Dynamic Programming
- [譯] 密碼學速成課密碼學
- SQL 語法速成手冊SQL
- 視覺化速成指南-大小視覺化
- C# 9.0新特性詳解系列之二:擴充套件方法GetEnumerator支援foreach迴圈C#套件
- [玩轉MySQL之二]MySQL連線機制淺析及運維MySql運維
- 【轉】[C#] 重新命名資料夾C#
- (C#)時間戳、DateTime相互轉換C#時間戳
- C# 列舉遍歷和轉換C#
- 【轉】C# 中 強制退出WinForm程式C#ORM
- C#:檔案、byte[]、Stream相互轉換C#
- (轉貼) C++,C#,Java功能比較 (.NET) (C#) (C/C++)C++C#Java
- Golang 新手教程:入門速成指南Golang