Time of Update: 2017-02-27
和裝箱轉換正好相反,拆箱轉換是指將一個物件類型顯式地轉換成一個實值型別,或是將一個介面類型顯式地轉換成一個執行該介面的實值型別。拆箱的過程分為兩步:首先,檢查這個對象執行個體,看它是否為給定的實值型別的裝箱值。然後,把這個執行個體的值拷貝給實值型別的變數。我們舉個例子來看看一個對象拆箱的過程。int i=10;object obj=i;int j=(int)obj;這個過程用圖來表示就是: 可以看出拆箱過程正好是裝箱過程的逆過程。必須注意,裝箱轉換和拆箱轉換必須遵循類型相容原則。
Time of Update: 2017-02-27
裝箱轉換是指將一個實值型別隱式地轉換成一個object類型,或者把這個實值型別轉換成一個被該實值型別應用的介面類型(interface-type)。把一個實值型別的值裝箱,也就是建立一個object執行個體並將這個值複製給這個object,比如:int i=10;object obj=i;用下圖可以表示裝箱的過程: 我們也可以用顯式的方法來進行裝箱操作:int i=10;object obj=object(i);我們可以假想存在一個boxing類型,其聲明如下:class T_Box{
Time of Update: 2017-02-27
C#的另一大資料類型是參考型別。“引用”這個詞在這裡的含義是,該類型的變數不直接儲存包含的值,而是指向它所要儲存的值。也就是說,參考型別儲存實際資料的引用值的地址。C#中的參考型別有四種:●類●代表●數組●介面我們將在這裡介紹前三種參考型別(請訪問以下連結),而把對介面的深入進述將放在第十五章進行。4.2.1 類4.2.2 代表4.2.3 數組
Time of Update: 2017-02-27
在進行批量處理資料的時候,我們要用到數組。數組是一群組類型相同的有序資料。數組按照數組名、資料元素的類型和維數來進行描述。C#中提供System.Array類是所有數群組類型的基類。數組的聲明格式:non-array-type[ dim-separators ] array-instance name;比如我們聲明一個整數數組:int[] arr;在定義數組的時候,可以預先指定數組元素的個數,這時在“[]”中定義數組的元素個數,它的個數可以通過數組名加圓點加“
Time of Update: 2017-02-27
在C和C++程式員看來,指標既是他們最強有力的工具之一,同時又給他們帶來了很多苦惱之處。因為指標指向的資料類型可能並不相同,比如你可以把int類型的指標指向一個float類型的變數,而這時程式並不會出錯。而且,如果你刪除了一個不應該被刪除的指標(比如Windows中指向主程式的指標),程式就有可能崩潰。由此可見,濫用指標給程式的安全性埋下了隱患。正因為如此,在C#語言中取消了指標這個概念。當然,對指標戀戀不捨的程式員仍然可以在C#中使用指標,但必須聲明這段程式是“非安全(unsafe
Time of Update: 2017-02-27
類是物件導向編程的基本單位,是一種包含資料成員、函數成員和巢狀型別的資料結構。類的資料成員有常量、域和事件。函數成員包括方法、屬性、索引指標、運算子、建構函式和解構函式。類和結構同樣都包含了自己的成員,但它們之間最主要的區別在於:類是參考型別,而結構是實值型別。類支援繼承機制,通過繼承,衍生類別可以擴充基類的資料成員和函數方法,進而達到代碼重用和設計重用的目的。有關類的概念將放在第十章詳細講解,這裡請看一下類的定義:class PhoneBook{ private string name;
Time of Update: 2017-02-27
應用程式總是要處理資料,而現實世界中的資料類型多種多樣,我們必須讓電腦瞭解需要處理什麼樣的資料,以及採用哪種方式進行處理,按什麼格式儲存資料等等。比如,在編碼程式中需要處理單個字元,在定購票系統中需要列印貨幣金額,在科學運算中不同情況下我們需要不同精度的小數,這些都是不同的資料類型。其實,任何一個完整的程式都可以看成是一些資料和作用於這些資料上的操作的說明。每一種進階語言都為開發人員提供一組資料類型,不同的語言提供的資料類型不盡相同。在本書的第一部分,我們為讀者簡要地介紹了C#語言的主要特點和運
Time of Update: 2017-02-27
枚舉(enum)實際上是為一組在邏輯上密不可分的整數值提供便於記憶的符號。比如,我們聲明一個代表星期的枚舉類型的變數:enum WeekDay Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}WeekDay day;注意:結構是由不同類型的資料群組成的一組新的資料類型,結構類型的變數的值是由各個成員的值組合而成的。而枚舉則不同,枚舉類型的變數在某一時刻只能取枚舉中某一個元素的值。比如,
Time of Update: 2017-02-27
利用上面介紹過的簡單類型,我們在進行一些常用的資料運算、文文書處理似乎已經足夠了。但是我們會經常碰到一些更為複雜的資料類型。比如,通訊錄的記錄中可以包含他人的姓名、電話和地址。如果按照簡單類型來管理,每一條記錄都要存放到三個不同的變數當中,這樣工作量很大,也不夠直觀。有沒有更好的辦法呢?正如上面的例子,在實際生活中,我們經常把一組相關的資訊放在一起。把一系列相關的變數組織成為一個單一實體的過程,我們稱為產生結構的過程。這個單一實體的類型就叫做結構類型,每一個變數稱為結構的成員。結構類型的變數採用
Time of Update: 2017-02-27
除了數字以外,電腦處理的資訊,主要就是字元了。字元包括數字字元、英文字母、表達符號等,C#提供的字元類型按照國際上公認的標準,採用Unicode字元集。一個Unicode的標準字元長度為16位,用它可以來表示世界上大多數語言。可以按以下方法給一個字元變數賦值,如:char c='A';另外,我們還可以直接通過十進位轉義符(首碼\x)或Unicode標記法給字元型變數賦值(首碼\u),如下面對字元型變數的賦值寫法都是正確的:char c='\x0032'; //char c='\u0032'; /
Time of Update: 2017-02-27
浮點類型數學中的實數不僅包括整數,而且包括小數。小數在C#中採用兩種資料類型來表示:單精確度(float)和雙精確度(double)。它們的差別在於取值範圍和精度不同。電腦對浮點數的運算速度大大低於對整數的運算。在對精度要求不是很高的浮點計算中,我們可以採用float型,而採用double型獲得的結果將更為準確。當然,如果在程式中大量使用雙精確度類浮點數,將會佔用更多的記憶體單元,而且電腦的處理任務也將更加繁重。●單精確度:取值範圍在正負 之間,精度為7位元。●雙精確度:取值範圍在正負
Time of Update: 2017-02-27
布爾類型是用來表示“真”和“假”這兩個概念的。這雖然看起來很簡單,但實際應用非常廣泛。我們都知道,電腦實際上就是用二進位來表示各種資料的,即不管何種資料,在電腦內部都是採用二進位方式處理和儲存的。布爾類型表示的邏輯變數只有兩種取值:“真”和“假”。在C#中,分別採用true和false兩個值來表示。注意:在C和C++中,用0來表示“假”,其它任何非0的式子都表示“真
Time of Update: 2017-02-27
顧名思義,整數類型的變數的值為整數。數學上的整數可以從負無窮大到正無窮大,但是由於電腦的儲存單元是有限的,所以電腦語言提供了整數類型的值總是在一定範圍之內。C#中有九種整數類型:短位元組型(sbyte)、位元組型(byte)、短整型(short)、無符號短整型(ushort)、整型(int)、無符號整型(uint)、長整型(long)、無符號長整型(ulong)。劃分的依據是根據該類型的變數在記憶體中所佔的位元。位元的概念是按照2的指數冪來定義的,比如說8位整數,則它可以表示2的8次方個數值,即
Time of Update: 2017-02-27
一、支援多種程式設計語言的.NEt結構架構讓我們翻開教科書,回顧一下近十年來軟體開發的曆史。多年以前,當微軟的元件物件模型(Component Object
Time of Update: 2017-02-27
VC++2008 調試通過// codetest.cpp : Defines the entry point for the console application.//#include "stdafx.h"#includeusing namespace std;class Observer;class Subject{public:virtual void Attach(Observer *o)=0;virtual void Change()=0;virtual char
Time of Update: 2017-02-27
近來接到幾個朋友問Visual C++ 2005 (C++/CLI) Webcast中講的“實值型別的強型別裝箱執行個體”是什嗎?講座比較匆忙,因此對這個技術點只是點了一下,沒有詳細展開。這裡借blog把它展開說一下。首先來看下面的C#代碼:using System;using System.Collections;struct MyClass{ public int data;}class Test{ public static void Main() {
Time of Update: 2017-02-27
無參、無傳回值的函數:using System;class MyClass{ static void Show() { Console.WriteLine("function"); } static void Main() { Show(); //function Console.ReadKey(); }}參數:using System;class MyClass{ static void Show(string str)
Time of Update: 2017-02-27
字串數組:using System;class MyClass{ static void Main() { string[] arr = new string[3] { "aa", "bb", "cc" }; foreach (string s in arr) Console.WriteLine(s); // aa/bb/cc Console.ReadKey(); }}整數數組:using
Time of Update: 2017-02-27
顯示枚舉、枚舉值、枚舉名:using System;class MyClass{ enum MyEnum { AA, BB, CC }; /* 類型定義不能在函數體內 */ static void Main() { MyEnum e = MyEnum.CC; Console.WriteLine(e); // CC Console.WriteLine((byte)e); // 2 Console.WriteLine((int)
Time of Update: 2017-02-27
if (bool) { } else { }switch (v) { case v1: ... break; case v2: ... break; ... default: ... break; }do { } while (bool);while (bool) { }for (int i; i < 10; i++) { }foreach (Type item in items) { }break;continue;goto;C# 的 switch 語句支援字串, 但好像只能用