建立.net應用程式的步驟:
1)使用某種.net相容語言編寫應用程式**
2)把**編譯為cil,儲存在程式集中
3)執行**時,使用jit編譯器將**編譯為本機**
4)在託管的clr環境下執行本機**,以及其他應用程式或程序
用字串表示帶路徑的檔名,字串中會帶有大量的斜槓,例如:"c:\\temp\\mydir\\myfile.doc",可以在字串前加乙個@符號,這樣對於引號,雙引號,斜槓等符號就不用在轉義了,例如:@"c:\temp\mydir\myfile.doc"
把字串轉換成列舉變數不能使用簡單的型別轉換,需要用乙個特殊的語法:(enumerationtype)enum.parse(typeof(enumerationtype), enumstring);
以下方式宣告陣列:
type name;
這樣只是定義了乙個陣列型別的變數,並沒有指定陣列的大小,陣列中也沒有內容,可以在定義的時候初始化,如:
也可以先定義陣列,然後再初始化,如:
int myintarray;
myintarray = new int[5] ;
如果定義陣列時沒有初始化,那麼陣列中的所有元素都有同乙個預設值,對於數值型別來說,其預設值是0,初始化元素的數量必須與陣列的長度一致,不能只初始化部分元素,這與c++是不一樣的
二維陣列採用如下方式申明:
int[,] myintarray;
宣告時可不指定任何的維度,因為c#限制初始化列表必須與陣列的長度一致,所以根據初始化列表就可以確定陣列的長度,但必須採用分段初始化的方式,如:
int[,] myintarray;
myintarray = new int[,] , };
申明陣列的陣列,即陣列中的每個元素都是乙個陣列,語法如下:
int jaggedintarray;
陣列的陣列有兩種初始化方式:
一。依次把每個元素初始化為陣列
jaggedintarray = new int[2];
jaggedintarray[0] = new int[3];
jaggedintarray[1] = new int[4];
二。在定義的時候初始化
jaggedintarray = new int[3], new int , new int };
或
int jaggedintarray = new int[3], new int , new int };
c#有一種特殊的函式引數,這種引數只能出現在引數列表的最後乙個,叫做引數陣列,它有params關鍵字定義,定義的形式為:
params type name
呼叫方式可以採用
functionname(var1, var2....,varn);
唯一的限制是var等一系列變數必須型別相同並且是type型別的
c#的函式引數預設為值引數,如果需要使用引用引數,需要在函式引數前加上ref關鍵字,同時在呼叫函式的地方,也要在引數前加上ref關鍵字,例如:
int number = 2;
func(ref number);
static void func(ref int number)
c#可以使用輸出引數,需要在函式引數前加上out關鍵字,同事在呼叫函式的地方,也要在引數前加上out關鍵字,例如:
int maxvalue;
func(ints, out maxvalue);
static void func(int ints, out int maxvalue)}}
注意;輸出引數可以是未初始化的,即使是經過初始化的,在使用輸出引數時,也需要將它看作是未初始化的
函式委託類似與c++中的函式指標,示例如下:
delegate int operationfunc(int a, int b);
static void main(string args)
static int add(int a, int b)
static int mulit(int a, int b)
注意,委託定義中是沒有static的
debug.writeline()和trace.writeline()都是用於向ide的輸出視窗輸出內容,用於程式執行時顯示資訊,區別在於前者只在debug模式下生效,而後者在debug和release模式下都生效,這些資訊也可以在滿足某些條件的情況下才輸出,分別對應debug.writelineif()和trace.writeline if()這兩個函式,但引數1中的表示式結果為真,則輸出要顯示的資訊
在使用類靜態成員變數前,需要對靜態成員變數進行初始化,儘管可以在宣告時進行初始化,但有時需要比較複雜的初始化,可以使用靜態建構函式執行這種初始化任務,乙個類只能有乙個靜態建構函式,該建構函式不能有訪問修飾符,也不能帶有任何引數,靜態建構函式不能直接呼叫,只能在下述情況下執行:
建立包含靜態建構函式的類例項時
訪問包含靜態建構函式的類的靜態成員時
示例:
class myclass
}
靜態類只能包含靜態成員,不需要示例建構函式,靜態類可以有乙個靜態建構函式,示例:
public static void func()
public static int m_i;
}
預設情況下,類申明是內部的,即只有當前專案中的**才能訪問它,還可以指定類是公共的,可以由其他專案中的**來訪問,為此,要使用關鍵字public來進行類宣告,還可以指定類是抽象的(abstract,不能例項化,只能繼承,可以有抽象成員)或密封的(sealed,不能繼承)。
在c#的類定義中,只能有乙個基類,如果繼承了乙個抽象類,就必須實現所繼承的所有抽象成員。編譯器不允許派生類的可訪問性高於基類,也就是說,內部類可以整合於乙個公共基類,但公共類不能繼承於乙個內部類。
申明介面的方式與宣告類相似,但使用的關鍵字是inte***ce,而不是class,訪問修飾符關鍵字public和internal的使用方式是相同的,與類一樣,介面也預設定義為內部介面,所以要使介面可以公開訪問,必須使用public關鍵字,不能在介面中使用關鍵字abstract和sealed,因為這兩個修飾符在介面定義中是沒有意義的。
無論在派生類上使用什麼建構函式,除非明確指定,否則就是用基類的預設建構函式,如需要呼叫基類的其他建構函式,可以把**放在方法定義的冒號後面,base關鍵字用於表示基類,this關鍵字用於表示當前類,例如:
public derived() : base(1)
{}public derived(int i) : this(1, 2)
{}public derived(int i, int j)
{}
介面和抽象類:
相似點
區別
類與結構很相似,但類是應用型別,而結構是值型別,比如:將乙個類物件賦值給另乙個類物件,這兩個類物件將指向同一塊記憶體,修改乙個物件,另乙個物件的值也會改變,而將乙個結構變數賦值給另乙個結構變數,這兩個結構變數只是內容一樣,指向兩塊不同的記憶體
c 學習筆記一
2007 9 4 引用,該型別的變數不直接儲存所包含的值,而是指向它所要儲存的值。c 的引用型別有四種 類 代表 陣列 介面。一下 表示類b從類 a中繼承 class a class b a 類的成員有以下型別 成員常量,代表與類相關聯的常量值。域,即類中的變數。成員方法,複雜執行類中的計算和其它操...
C 學習筆記 一
c 學習筆記 一 by heiyeluren 學習 visual c 入門經典 的個人筆記。1.函式的過載 函式過載提供了建立多個同名函式的能力。我們確定乙個函式是獨一無二的方法是通過三項方法,分別是是通過返回值的型別,函式名,函式 引數等三項內容。我們函式過載主要就是使用不同的引數來確定使用那個函...
C 學習筆記一
c中的記憶體分配方式 1.靜態儲存區域 在程式開始之前就可以分配,且在程式執行過程中始終存在 2.棧 儲存單元在其上分配,單元外自動釋放,多見內建 資料型別於此 3.堆 動態分配,即程式執行時分配此部分記憶體.由使用者分配且要負責釋放.生存期由使用者決定,不受範圍限制 stdlib.h提供mallo...