C#學習記錄

来源:http://www.cnblogs.com/fcug/archive/2016/12/19/6201005.html
-Advertisement-
Play Games

轉眼幾個月沒更博了,把幾個月前學C#的筆記發一下,就記錄了點教重要的點子而已 1.列印 Console.WriteLine(); 列印 Console.ReadKey(); 按一個按鍵繼續執行 Console.ReadLine(); //用戶輸入文字的時候程式是暫停的,用戶輸入完畢點回車,把用戶輸入 ...


轉眼幾個月沒更博了,把幾個月前學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兩種方法。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、企業系統集成的時候,大量的欄位是很麻煩處理的,用Format 的方式可快速處理 string sql = @"SELECT * FROM table WHERE TASKID='" + taskid + "'"; DataTable dt = DBUtil.Query(sql).Tables[0 ...
  • /// /// Clones the control. /// /// The source element. /// The dest element. public void CloneControl(UIElement sourceElement, UIElement destElement.... ...
  • 最近又重新整理一下log4net日誌的配置,現在記錄一下流程和一些遇到的問題,以備後續使用,具體的配置參數等信息.此文無,見諒! 1. 下載log4net.dll文件(網上很多,隨便找一個!) 2. 項目中引用此dll 3. appconfig中配置log4net(具體配置方案有很多例子.) 4.  ...
  • Smobiler是一個在VS環境中使用.Net語言來開發APP的開發平臺,也許比Xamarin更方便 ...
  • 前言 solr排除查詢也就是我們在資料庫和程式中經常處理的不等於,solr的語法是在定語前加【-】。、 從Solr控制台 從solr控制台看下排除查詢的url, 也可以在構建url查詢時自己添加篩選條件 ...
  • 學會使用異常 在 C# 中,程式中在運行時出現的錯誤,會不斷在程式中進行傳播,這種機制稱為“異常”。 異常通常由錯誤的代碼引發,並由能夠更正錯誤的代碼進行 catch。 異常可由 .NET 的 CLR 或由程式中的代碼引發。 一旦引發了異常,這個異常將會在調用堆棧中一直向上進行傳播,直到尋找到跟它匹 ...
  • 1. Action 如果返回的是自定義的引用類型,則預設返回的是類名,其實就是調用了類的tostring方法。 2. @Html.Partial用於將分部視圖渲染為字元串 @{Html.RenderPartial}將分佈視圖直接寫入響應輸出流,所以只能直接放在代碼塊中,不能放在表達式中(返回值是vo ...
  • 這段時間的博客打算和大家一起分享下webapi的使用和心得,主要原因是群裡面有朋友說希望能有這方面的文章分享,隨便自己也再回顧下;後面將會和大家分不同篇章來分享交流心得,希望各位多多掃碼支持和點贊,謝謝,希望大家喜歡: . 使用vs創建webapi項目及項目結構介紹 . 預設路由模板介紹 . 屬性路 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...