C 學習筆記(一)

2021-06-02 13:08:04 字數 3811 閱讀 4828

建立.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...