C#學習記載。本站提示廣大學習愛好者:(C#學習記載)文章只能為提供參考,不一定能成為您想要的結果。以下是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兩種辦法。