程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> C#學習記錄,

C#學習記錄,

編輯:關於.NET

C#學習記錄,


轉眼幾個月沒更博了,把幾個月前學C#的筆記發一下,就記錄了點教重要的點子而已

 

1.打印

Console.WriteLine(); 打印

Console.ReadKey(); 按一個按鍵繼續執行

Console.ReadLine(); //用戶輸入文字的時候程序是暫停的,用戶輸入完畢點回車,把用戶輸入的東西做為返回值

例:

string s =  Console.ReadLine(); 讀取進去的是字符串,所以不能用其他類型接收

 

 

2.數據類型:

值類型:int、float、double、char、byte、Boolean、枚舉

引用類型:DateTime、string、所有類

 

類型轉換:

值類型:從小到大自動轉,從大到小強制轉,(類型),Convert.To***()

引用類型:需要有繼承關系才可以轉換

轉換成字符串: ToString()

類型轉換:cast 強轉(位數有差,可能丟失)

      convert 考慮數據意義的轉換

C#字符串與OC一致,與C不一致,不考慮最後的\0

 

 

‘a’   是char類型,”a”是string類型

@“\\\\” @表示字符串中的\不當成轉義符

 

 

3.字符串的處理

·C#中單個字符用單引號包含就是char類型,(‘a’),單引號中放且只能放一個字符。

·單個字符也可以表示為字符串,還可以有長度為0的字符串。

·使用s.Length屬性可以來獲得字符串中的字符個數

·string可以看做是char的只讀數組。char c = s[1];例子:遍歷輸出sting中的每個元素。

·c#中字符串有一個重要的特性:不可變性,字符串一旦聲明就不再可以改變。所以只能通過索引來   

  讀取指定位置的char進行修改。

·如果要對char進行修改,那麼久必須創建一個新的字符串,用s.ToCharArray()方法得到字符串的

 char 數組,對數組進行修改後,調用new string(char[])這個構造函數來創建char數組的字符串。一

 旦字符串被創建,那麼char 數組的修改也不會造成字符串的變化。例子:將字符串中的A替換成a.

 

 

 

字符串不可變性(分配的內存塊裡的不可變)

string s1 = @“hello”;

char[] chars = s1.ToCharArray();

string s2 = new string(chars);

此時改變後s2為aello,而s1不變,所以只是復制了一份char數組數據,於源數據無關

 

如string s = “abc”; s = @“123”

最後值改變了,其實不是

要區分變量名和變量指向的值得區別。程序中可以有很多字符串,然後由字符串變量指向他們,變量可以指向其他的字符串,但是字符串本身沒有變化。字符串不可變性指的是內存中的字符串不可變,而不是變量不變。

 

 

4.字符串類的常用函數

 

1)

·ToLower() 得到字符串的小寫形式。

·注意字符串是不可變的,所以這些函數都不會直接改變字符串的內容,而是把修改後的值通過函數·返回值的形式返回。s.ToLower()與s = s.ToLower()

·ToUpper():得到字符串的大寫形式:Trim()去掉字符串兩端的空白。

·s1.Equals(s2,StringComparison.OrdinallgnoreCase),兩個字符串進行區分大小寫的比較

Ignore:忽略,Case:大小寫

==是區分大小寫的比較,Equals()是忽略大小寫的比較

 

 

2)分割字符串

string[] str = strings.Split(‘,’); 將字符串按照指定的分割符分割成字符串數組

 

將字符串按照指定的char分割符分割成字符串數組(options取RemoveEmptyEntries時,移除結果中的空白字符串)

string str1 = @“aa,bb,,cc,dd”;出現空字符串 

string[] str = strings.Split(new char[]{’,’},StringSplitOptions.RemoveEmptyEntries);

 

將字符串按照指定的string分割符分割成字符串數組(同上)

string[] str = strings.Split(new string[]{“aa”},StringSplitOptions.RemoveEmptyEntries);

 

 

3)替換字符串

string.Replace(“a”,”b”); 替換string裡面的a全部成b

獲取子字符串:

string.Substring(n);     從第n位開始截取string的字符串到結束,包含n

string.Substring(n,m);     從第n位開始截取string的字符串長度為m(m超過string長度會出錯),包含n

 

 

4)返回bool值 使用:string.Contains

Contains(string value)判斷字符串中是否含有子串value

StartsWith(string value)判斷字符串中是否以子串value開始

EndsWith(string value)判斷字符串中是否以子串value結束

返回int

IndexOf(string value)取子串value第一次出現的位置

 

 

 

 

 

 

枚舉,跟其它語言沒什麼區別

枚舉的意義就在於限定變量的取值范圍

enum sender{a,b}

 

 

foreach (string name in names){}; 遍歷,還有for,見多了

 

 

static void function(params string[] values){};

params 可變參數 參數必須是形參表中的最後一個參數

 

 

函數重載:函數名一致,參數不一致,可做兩個函數使用,與有無返回值無關(不嚴謹)

 

 

 

函數的ref和out參數

函數參數默認是值傳遞的,也就是”復制一份”

而ref是將本身傳進去,非復制

 

static void Main(string[] args)

{

int age = 20;

1: IncAge(age);

2: IncAge(ref age);

Console.WriteLine(age); //1打印結果為20,因為傳進的只是形參值;2打印結果為21,

Console.ReadKey;

}

1:

static void IncAge(int age)

{

age++;

}

2:

static void IncAge(ref int age)

{

age++;

}

 

ref必須先初始化因為是引用,所以必須先“有”,才能引用,而out是內部為外部賦值,所以不需要初始化,而且外部初始化也沒有用。

ref應用場景內部對外部的值進行改變,out則是內部為外部變量賦值,out一般用在函數有多個返回值的場所。

 

 

string str = Console.ReadLine();

int i;

int.TryParse(str,out i); //轉換 返回值true  or false

 

ref應用,如交換兩個數的值

 

 

5.構造函數

 

·構造函數用來創建對象,並且可以在構造函數中對對象進行初始化。

·構造函數是用來創建對象的特殊函數,函數名和類名一樣,沒返回值,連void都不用。

·構造函數可以有參數,new對象的時候傳遞函數參數即可

·構造函數可以重載,也就是有多個參數不同的構造函數。

·如果不指定構造函數,則類有一個默認的無參構造函數。

 如果指定了構造函數,則不再有默認的無參構造函數,如果需要無參構造函數,則需要自己來寫。

如:

static void Main(string[] args)

{

Person p1 = new Person();

Person p2 = new Person(“a”);

Person p3 = new Person(“a”,2);

Console.ReadKey;

}

class Person

{

public Person()

{

 

}

public Person(string name)

{

 

}

public Person(string name,int age)

{

 

}

}

 

 

 

 

 

 

 

 

 

 

對面可以叫做類的實例,字段就是類的狀態

面向對象的三個特性:封裝、繼承、多態。

 

 

 

 

 

 

 

 

 

6.屬性(可公可私有)

慣用法:屬性開頭字母大寫,字段開頭字母小寫

public字段和屬性的區別,屬性可以進行非法設置值的判斷

 

class person

{

private int age;

public int Age

{

set //賦值

    {

if(age>0)

{

return; //如果return this.Age;造成死循環,自己給自己賦值

}

this.age = value; //value代表用戶賦值過來的值

    }

get //取值

    {

return this.age;

    }

 

}

}

 

 

 

 

 

7.異常

try{

執行到錯誤點後,不再往下執行

}

catch(Exception ex){

出錯後執行,再跳到外面繼續執行

Console.WriteLine(“數據錯誤:”+ex.Message+”。異常堆棧:”+ex.StackTrace);

}

 

throw:拋出   catch:抓住

//自定義報錯異常聲明

else{

throw new Exception(“自定義異常”);

}

 

 

const 常量:不會改變的量

 

靜態變量:static 屬於全局變量,無需new

在static成員中不能直接調用非static成員

例:

class Person

{

public static int TotalCount;

public int Age;

public static void number()

{

Console.WriteLine(@“{0}”,TotalCount);

//可調用TotalCount,但調不了Age

}

 

public void Other()//非static成員中科院調用static成員

{

Console.WriteLine(@“{0},{1}”,TotalCount,Age);

}

}

 

 

 

 

 

 

8.靜態類

static class Person

{}

無法被new的類是靜態類,靜態類一般用來實現一些函數庫。

 

 

 

 

 

 

 

 

 

 

 

9.命名空間

 

當有多個類重名時,可放不同文件夾下,或namespace不一樣,使用時寫全路徑就行

當前類文件裡有Person類

另一個文件夾名為hr,或namespace不一致的類下面有個類Person

 

在當前類文件裡使用hr文件夾裡的Person類時如下:

如果要使用的類和當前的類不在同一個namespace,則需要添加using引用

導入該文件,在頂部

using 命名空間.hr;

命名空間.hr.Person p2 = new 命名空間.hr.Person();

//就像文件的全路徑一樣

 

 

10.索引

C#中提供了按照索引器進行訪問的方法

定義索引器的方式:string this[int index]

{

get {

return “”;

}

set{}

}

string為索引器的類型,[]中是參數列表。進行索引器寫操作就是調用

set代碼塊,在set內部使用value得到用戶設置的值;進行讀操作就是

執行get代碼塊。

索引器參數可以不止一個,類型也不限於int,幾號可以是任意類型。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11.

項目認識,從各個地方復制

 

 

String.Empty是string類的一個靜態常量;

String.Empty和string=””區別不大

 

string s1 = "";

string s2 = string.Empty;

if (s1 == s2)<br>{

    Console.WriteLine("一模一樣!");

}   

// 結果都是True

 

String.Empty和string=””一樣,同樣需要占用內存空間,為什麼推薦優先使用String.Empty ?

string.Empty只是讓代碼好讀,防止代碼產生歧義

 

 

 

 

 用於控制一個對象是否激活,一個對象激活當且本身active=true,並且它的父結點也都active。相當API有:

  1)GameObject.SetActive

  2)GameObject.activeSelf

  3)GameObjectd.activeInHierarchy

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Socket.BeginReceive 方法 (Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object)

 

語法

[HostProtectionAttribute(SecurityAction.LinkDemand, ExternalThreading = true)]

public IAsyncResult BeginReceive(

byte[] buffer,

int offset,

int size,

SocketFlags socketFlags,

AsyncCallback callback,

object state

)

 

參數

buffer

Byte 類型的數組,它是存儲接收到的數據的位置。

offset

buffer 參數中存儲所接收數據的位置,該位置從零開始計數。

size

要接收的字節數。

socketFlags

SocketFlags 值的按位組合。

callback

一個 AsyncCallback 委托,它引用操作完成時要調用的方法。

state

一個用戶定義對象,其中包含接收操作的相關信息。當操作完成時,此對象會被傳遞給 EndReceive 委托。

返回值

Type: System.IAsyncResult

引用異步讀的 IAsyncResult。

 

 

 

 

 

 

異常

 

 

Exception

Condition

ArgumentNullException

buffer 為 null

SocketException

試圖訪問套接字時發生錯誤。有關更多信息,請參見備注部分。

ObjectDisposedException

Socket 已關閉。

ArgumentOutOfRangeException

offset 小於 0。

- 或 -

offset 大於 buffer 的長度。

- 或 -

size 小於 0。

- 或 -

size 大於 buffer 的長度減去 offset 參數的值。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Socket.BeginReceive 方法 (Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object)

開始從連接的 Socket 中異步接收數據。

命名空間:   System.Net.Sockets

程序集:  System(System.dll 中)

 

語法

 

[HostProtectionAttribute(SecurityAction.LinkDemand, ExternalThreading = true)]

public IAsyncResult BeginReceive(

byte[] buffer,

int offset,

int size,

SocketFlags socketFlags,

AsyncCallback callback,

object state

)

 

參數

buffer

Byte 類型的數組,它是存儲接收到的數據的位置。

offset

buffer 參數中存儲所接收數據的位置,該位置從零開始計數。

size

要接收的字節數。

socketFlags

SocketFlags 值的按位組合。

callback

一個 AsyncCallback 委托,它引用操作完成時要調用的方法。

state

一個用戶定義對象,其中包含接收操作的相關信息。當操作完成時,此對象會被傳遞給 EndReceive 委托。

返回值

Type: System.IAsyncResult

引用異步讀的 IAsyncResult。

異常

 

 

Exception

Condition

ArgumentNullException

buffer 為 null

SocketException

試圖訪問套接字時發生錯誤。有關更多信息,請參見備注部分。

ObjectDisposedException

Socket 已關閉。

ArgumentOutOfRangeException

offset 小於 0。

- 或 -

offset 大於 buffer 的長度。

- 或 -

size 小於 0。

- 或 -

size 大於 buffer 的長度減去 offset 參數的值。

 

 

 

備注

 

 

將 count 個字節從 src 復制到 dst,前者開始於 srcOffset 而後者開始於 dstOffset。

開發人員應謹記 BlockCopy 方法使用偏移量訪問 src 參數,而不是使用索引或數組上下限等編程構造。例如,如果使用應用程序的編程語言聲明一個上限為零,下限為 -50 的 Int32 數組,然後將該數組和偏移量 5 傳遞給 BlockCopy 方法,則該方法將訪問的第一個數組元素是該數組的第二個元素(位於索引 -49 處)。此外,首先訪問數組元素 -49 的哪個字節取決於執行應用程序的計算機的 Edian 設置。

 

 

 

 

 

 

 

 

 

 

Add和AddRange

 

Add:將指定的對象添加到……中

AddRange:向……末尾,添加數組

-

在群體操作時,使用AddRange取代Add 

 

用AddRange可以讓我們要加入的東西一次性加入,而不要每次都加一次,這樣顯然可以加快速度。幾乎所有的windows control都支持Add和AddRange兩種方法。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved