2012/02/21

on
C# C Sharp 新手Memo (以 VS 2010為主)  C# 程式設計手冊(MSDN)  C# C Sharp 教學資料連結
■■■ 選擇陳述式  ifelseswitchcase  default 
■■■ 反覆運算陳述式  doforforeachinwhile
■■■ 跳躍陳述式  breakcontinuedefaultgotoreturnyield
■■■ 例外處理陳述式  throwtry-catchtry-finallytry-catch-finally
■■■ Checked 和 Unchecked  checkedunchecked
■■■ fixed 陳述式   固定                 ■■■ lock 陳述式    鎖定
■■■ Environment.Exit(Environment.ExitCode) : 不等待相關訊息的結束,強制退出應用程式。 (另有 Application.ExitApplication.ExitThread )
■■■ Environment.NewLine (同 vbNewLine) : 換行。

if (Char.IsUpper(c)) { Console.WriteLine("Character is uppercase.");}
else if (Char.IsLower(c)){Console.WriteLine("Character is lowercase.");}
else if (Char.IsDigit(c)){Console.WriteLine("Character is a number.");        }
else{Console.WriteLine("Character is not alphanumeric.");}

switch (caseSwitch){ // mStr
    case 1:Console.WriteLine("Case 1");  break; // "1"
    case 2:Console.WriteLine("Case 2");  break; // "2"
    default:Console.WriteLine("Default case"); break;
}
do-while,for,foreach 區塊中的任一位置使用 break 陳述式中斷此迴圈。可以使用 continue 陳述式直接跳至 while 運算式評估陳述式。也可以由 gotoreturnthrow 陳述式結束。
do{Console.WriteLine(x);  x++;
} while (x < 5);
for (int i = 1; i <= 5; i++)  {  Console.WriteLine(i);  }
int[] fibarray = new int[] { 0, 1, 2, 3, 5, 8, 13 };
foreach (int i in fibarray)  {  System.Console.WriteLine(i);  }
while (n < 6)  { Console.WriteLine("Current value of n is {0}", n);  n++;  }
■■■ Try-Catch這東西,只要是寫在TryCatch裡面的程式發生錯誤,就會跳到Catch的地方,最後 有無錯誤 一定會執行finally區段(如果有寫的話).

throw  try-catch  try-finally  try-catch-finally
try{string s = null;ProcessString(s);}
catch (ArgumentNullException e){ // Most specific:
  Console.WriteLine("{0} First exception caught.", e); }
catch (Exception e){ // Least specific:
  Console.WriteLine("{0} Second exception caught.", e); }

■■■ this 關鍵字所指的是類別 (Class) 的目前執行個體 (Instance),而且也用來當做擴充方法之第一個參數的修飾詞 (Modifier)。
■■■ base 關鍵字用於存取衍生類別中的基底類別 (Base Class) 成員
■■■ Windows FormClose  Hide  Focus  Show()  ShowDialog()
■■■ Me in C# is this , and MyBase in C# is base
===
■■■ 應用程式組態檔,於asp.net是web.config,WindowsForm是App.config(執行檔名稱.exe.config)。組態檔對程式本身就是基礎和依據,是個xml檔,提供了System.Web.ConfigurationSystem.Configuration 兩個命名空間,要使用它,需加入參考。.net提供可直接訪問(注意大小寫)元素的方法:
string ConString=System.Configuration.ConfigurationSettings.AppSettings["ConnenctionString"];

■■■ Main 方法為 .exe 程式的進入點,是程式控制的開始及結束位置。
■ Main 在類別或結構內宣告。 Main 必須是靜態方法,而且不能是 public (在前面範例中,它會接收預設的 private 存取)。封入類別或結構不一定要是靜態的。

class TestClass{
    static void Main(string[] args){
      // Display the number of command line arguments:
        System.Console.WriteLine(args.Length);
    }
}

■ Main 可以有 void 或 int 傳回型別。
■ 宣告 Main 方法時,可以選擇是否搭配包含命令列引數的 string[] 參數。 在使用 Visual Studio 建立 Windows Form 應用程式時,您可以手動加入參數,或者以 Environment 類別來取得命令列引數。 參數會讀取為以零為基底索引的命令列引數。與 C 和 C++ 不同的是,程式名稱不做為第一個命令列引數處理

■■■ 我在第2個和第3個窗體的FormClosing事件那裡設了application.exit()之後,方便完全退出程序。但是很奇怪的是,我在非主窗體內寫 this.Close()之後,全部窗體都關了,程序也退出了。如果不在FormClosing那裡設置Application.Exit()就不會這樣。
■ 因為有this.Close()所以都會執行窗體的FormClosing事件, 而你窗體的FormClosing事件中有application.exit()所以全部窗體都關了,程序也退出了,建議你子窗體退出時直接this.Close(),而application.exit()加在主窗體裡就行了

■■■ HOW TO:將字串轉換為整數 ::: ToInt32(String) 方法,將輸入由 string 轉換為 int
■■■ 字串是型別 String 的物件,其值為文字。 在內部,文字會儲存為 Char 物件的循序唯讀集合。 C# 字串尾端沒有 null 結尾字元,因此 C# 字串可以包含任何數目的內嵌 null 字元 ('\0')。 字串的 Length 屬性代表字串中包含的 Char 物件數,而不是 Unicode 字元數。 若要存取字串中個別的 Unicode 字碼指標,請使用 StringInfo 物件。
■■■ 宣告和初始化字串 :

string message1;// Declare without initializing.
string message2 = null;// Initialize to null.
// Initialize as an empty string.// Use the Empty constant instead of the literal "".
string message3 = System.String.Empty;
//Initialize with a regular string literal.
string oldPath = "c:\\Program Files\\Microsoft Visual Studio 8.0";
// Initialize with a verbatim string literal.
string newPath = @"c:\Program Files\Microsoft Visual Studio 9.0";
System.String greeting = "Hello World!";// Use System.String if you prefer.
// In local variables (i.e. within a method body)// you can use implicit typing.
var temp = "I'm still a strongly-typed System.String!";
// Use a const string to prevent 'message4' from// being used to store another string value.
const string message4 = "You can't get rid of me!";
// Use the String constructor only when creating
// a string from a char*, char[], or sbyte*. See System.String documentation for details.
char[] letters = { 'A', 'B', 'C' };
string alphabet = new string(letters);
除了使用字元陣列初始化字串之外,其他情況下並不是使用 new 運算子來建立字串物件。
使用 Empty 常數值初始化字串,可以建立字串長度為零的新 String 物件。 零長度字串的字串常值 (String Literal) 表示為 ""。 藉由使用 Empty 值而非 null 來初始化字串,可以降低發生 NullReferenceException 的機會。 請在嘗試存取字串值前,先使用 IsNullOrEmpty(String) 方法驗證該值。

■■■ 數字型別及日期和時間型別的 ToString 方法都含有多載,而其中只有某些多載會包含 IFormatProvider 參數。 如果方法沒有 IFormatProvider 型別的參數,則會改以傳遞 CultureInfo.CurrentCulture 屬性所傳回的物件。

.NET Framework 提供三個實作 IFormatProvider 的類別:

■■■ 
標題 定義
標準數值格式字串 說明建立數值常用之字串表示的標準格式字串。
自訂數值格式字串 說明建立應用程式專屬數值格式的自訂格式字串。
標準日期和時間格式字串 說明建立 DateTime 值之常用字串表示的標準格式字串。
自訂日期和時間格式字串 說明建立應用程式專屬 DateTime 值格式的自訂格式字串。
標準 TimeSpan 格式字串 說明建立時間間隔之常用字串表示的標準格式字串。
自訂 TimeSpan 格式字串 說明建立應用程式專屬數值格式的自訂格式字串。
列舉型別格式字串 說明用來建立列舉值之字串表示的標準格式字串。
複合格式 描述如何將一個或更多的格式化值嵌入字串。 字串可以隨後顯示在主控台 (Console) 或寫入資料流。
執行格式化作業 列出各主題,提供執行特定格式設定作業的逐步指示。
剖析字串 說明如何將物件初始化為這些物件的字串表示所描述的值。 剖析是格式化的反向作業。
■■■ .NET 的字串作業是經過高度最佳化的,而且在絕大部分的情況下不會大幅影響到效能。 然而,在有些案例下的字串作業可能會影響到效能,例如會執行數千百次的緊密迴圈。 如果程式會執行許多字串處理,StringBuilder 類別可以建立字串緩衝區以提供更好的效能。 StringBuilder 字串也可以讓您重新指派內建字串資料型別不支援的某些個別字元。
System.Text.StringBuilder sb = new System.Text.StringBuilder("Rat: the ideal pet");   sb[0] = 'C';
for (int i = 0; i < 10; i++)  { sb.Append(i.ToString()); }

■■■ 
HOW TO:修改字串內容
HOW TO:串連多個字串 用 + 運算子和 Stringbuilder 類別,於編譯和執行階段聯結字串。
HOW TO:比較字串  如何執行字串的序數比較。
HOW TO:分割字串   包含使用 String.Split 方法剖析字串的程式碼範例。
HOW TO:使用字串方法搜尋字串  使用特定方法搜尋字串。
HOW TO:使用規則運算式搜尋字串   使用規則運算式搜尋字串。
HOW TO:判斷字串是否表示數值   安全剖析字串,判斷字串是否包含有效的數值。
HOW TO:將 String 轉換為 DateTime  將字串 (例如 "01/24/2008") 轉換為 System.DateTime 物件。
基本字串作業 提供主題連結,這些主題會使用 System.StringSystem.Text.StringBuilder 方法來執行基本字串作業。
剖析字串  描述如何將字元或空格插入字串中。
比較字串  包含如何比較字串的詳細資訊
使用 StringBuilder 類別  描述使用 StringBuilder 類別建立和修改動態字串物件。
LINQ 和字串  使用 LINQ 查詢執行各種字串作業的詳細資訊。

■■■ 在 C# 中,所有記憶體內的字串編碼都是 Unicode (UTF-16)。 當您將資料從儲存區帶入 string 物件時,資料會自動轉換成 UTF-16。 如果資料只包含 0 到 127 的 ASCII 值,您就不需要額外進行轉換。 不過,如果原始程式文字包含延伸 ASCII 位元組值 (128 到 255),則預設會按照目前的字碼頁 (Code Page) 來解譯擴充字元。 若要指定按照不同字碼頁來解譯原始程式文字,請使用 System.Text.Encoding 類別 (Class)示。
■■■ 陣列是以類別宣告的:type[] arrayName;

string[] stringArray = new string[6];
string[] weekDays = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };

int[] array1 = new int[5];// Declare a single-dimensional array
int[] array2 = new int[] { 1, 3, 5, 7, 9 };// Declare and set array element values
int[] array3 = { 1, 2, 3, 4, 5, 6 };// Alternative syntaxy
int[,] multiDimensionalArray1 = new int[2, 3];// Declare a two dimensional arra
int[,] multiDimensionalArray2 = { { 1, 2, 3 }, { 4, 5, 6 } };// Declare and set array element values
int[][] jaggedArray = new int[6][];// Declare a jagged array
jaggedArray[0] = new int[4] { 1, 2, 3, 4 };// Set the values of the first array in the jagged array structure
===
array5[2, 1] = 25;  int elementValue = array5[2, 1];
■■■ 陣列有下列屬性:
■ 陣列可以是一維、多維或不規則。
■ 數值陣列元素的預設值會設定為零,而參考元素則設定為 null。
■ 不規則陣列是指包含陣列的陣列,因此其元素為參考型別,而且會初始化為 null。
■ 陣列是以零為起始索引,即包含 n 個元素的陣列建立索引時,會從 0 開始,一直到 n-1 為止。
■ 陣列元素可以是任何型別,包括陣列型別。
■ 陣列型別是從抽象基底型別 Array 衍生參考型別。 由於此型別會實作IEnumerableIEnumerable<T>,您可以在 C# 中的所有陣列上使用 foreach 反覆運算
■■■ 一般而言,類別是針對更複雜的行為或在類別物件建立後計劃用於修改的資料,用來塑造它們的模型。 結構 (Struct) 則最適合小型資料結構 (Structure),其中包含的主要資料在結構 (Struct) 建立後並不計劃加以修改。詳細資訊,請參閱類別 物件結構
■■■ 所有方法、欄位、常數、屬性和事件都必須在型別中加以宣告,它們稱為類別或結構的成員」(Member) C# 中沒有全域變數或方法,而在其他語言中則有。 就算是程式的進入點 Main 方法,也必須在類別或結構中加以宣告。 下列清單包含可在類別或結構中宣告的所有不同類型成員。
■■■ 存取範圍 : 有些方法和屬性適用於從類別或結構外部的程式碼進行呼叫或存取,此稱為「用戶端程式碼」(Client Code)。 其他方法和屬性則可能僅適用於類別或結構本身。 所以,請務必限制您的程式碼的存取範圍,只開放給計劃中的用戶端程式碼。 請使用存取修飾詞 (Modifier) publicprotectedinternalprotected internalprivate,為型別及其成員指定用戶端程式碼對它們的存取程度。 預設存取範圍為 private 如需詳細資訊,請參閱存取修飾詞
■■■ static 修飾詞 (Modifier) 可用來宣告靜態成員,此成員屬於型別本身,並不隸屬任何一個物件。 static 修飾詞可以用於類別、欄位、方法、屬性、運算子、事件及建構函式 (Constructor),但是不能用於索引子 (Indexer)、解構函式 (Destructor) 或類別以外的型別。 如需詳細資訊,請參閱靜態類別和靜態類別成員
■■■ const 關鍵字是用來修改欄位或區域變數的宣告。 它所指定之欄位或區域變數的值是常數,也就是無法修改。const int x = 0;
public const double gravitationalConstant = 6.673e-11;
private const string productName = "Visual C#";
■■■ C# 程式設計大量使用命名空間(NameSpace)的原因有兩個。  第一,.NET Framework 會使用命名空間組織其多種類別,如: System.Console.WriteLine("Hello World!");   System 是命名空間,而 Console 是該命名空間中的類別。  可以使用 using (指示詞) 關鍵字,因此就不需要完整名稱,如: using System;  Console.WriteLine("Hello");
使用命名空間 (C# 程式設計手冊)
HOW TO:使用全域命名空間別名 (C# 程式設計手冊)
HOW TO:使用 My 命名空間 (C# 程式設計手冊)
命名空間關鍵字 (C# 參考)
:: 運算子 (C# 參考)
. 運算子 (C# 參考)

■■■ 
==========================================================
■■■ 
==========================================================
■■■ C# 程式設計手冊

本章節假設您已對 C# 和一般程式設計概念有所了解。 如果對於程式設計或者 C# 而言,您是完全的新手,建議您造訪 C# 開發人員中心,其中提供許多教學課程、範例和影片,可協助您開始使用。
如需特定關鍵字、運算子和前置處理器指示詞的詳細資訊,請參閱 C# 參考 如需 C# 語言規格的詳細資訊,請參閱 C# 語言規格


■■■  語言區段



==========================================================

a
a
■■■ 

0 意見: