標籤:io os 使用 ar 資料 sp c on 代碼
聲明
隨意寫的一些筆記,主要給自己看的,說的有些不嚴謹,有些表達比較簡略,大概就這意思就行了。
內容
字串,繼承,三種參數修飾符,
1.訪問類的欄位用this
eg: this.name = name; //後一個name是形參
2.字串的常見操作
1 .Length //字串的長度屬性,故無括弧
2 byte []bystr = System,Text.Encoding.Default.GetBytes(str);
3 字串截取 str.Substring(0,2); //第一個是起始位置,第二個是截取位元
4 指定位置為空白字元
char.IsWhiteSpace(str,2); 同理還有 IsPuctuation等
5 str.Replace(str1,str2); 將str中的str1子串替換成str2
6. strTrim(); 清除空格
7. Split的分割
string []arr =str.Split(‘,‘);
string []arr = str.Split(new char[2]{‘a‘,‘b‘};
string []arr = Regex.Split(str, "js", Regex.Options.IgnoreCase);
8. 通過Tostring()選擇字串格式
.ToString("e") 科學計算
.ToString("x") 16進位
...
9 擷取隨機數
Random r = new Random();
然後不斷的用.Next()擷取隨機數,很簡單吧~~
r.Next(a,b) //a~b的隨機數
r.Next(10)和r.Next()%10是一樣的
10 字串與整數之間的轉換
Int32.Parse(str); //為null時會拋出異常
Int32.TryParse(str, out myint); //返回true或false來說明解析是否成功,解析錯誤,則out調用方法得到零值。 Convert.ToInt32(str); //在null時不拋出異常,返回零
繼承
1.在子類中通過base.函數名 來調用基類函數成員
eg: base.sayHello();
子類的執行個體可以通過顯示類型轉換,轉換成父類的執行個體,進而調用父類的成員。
2. 子類的方法名與父類的方法名重名時,子類中需要用new來隱藏掉父類的成員方法。因為子類會從父類繼承到public的方法成員,不用new覆蓋的話,編譯器會蒙圈的~~
3. 用sealed來密封類,防止被繼承
4.抽象類別
基類並不具體實現任何執行代碼,只是做個定義,具體實現在衍生類別中重寫(override),另一種方法是不打類聲明為抽象類別,但基類裡也不寫具體實現,可以把基類的方法聲明為虛函數(virtual)
方法一:
public abstract class A
{
public abstract void sayHello(); //不止類要寫abstract,這裡也要寫(⊙o⊙)哦
}
public class B:A
{
public override void sayHello()
{
Console.WriteLine("ww");
}
}
方法二:
去掉class A前的abstract,同時將void sayHello前的abstract 改成virtual。
由此可見,override的函數在基類中必須為abstrac或是virtual。
4.多重繼承
C#不支援多重繼承,但C#允許類派生於多個介面,只不過多個父類的class改成interface罷了。。。
但是對於子類介面實現,有兩個條件
1.兩個介面的同名方法的實現,必須帶上介面名
如:void A.Common(){..};
void B.Common(){..}‘
2.兩個介面的不同名稱的方法,必須冠以"public"
如:public void A1();
public void B1();
eg:
interface A
{
void A1();
void Common();
}
interface B
{
void B1();
void Common();
}
class Child:A,B
{
public void A1(){..};
void A1.Common(){..};
public void B1(){..};
void B1.Common(){..};
}
具體執行個體化時:
Child chd = new Child();
((A)chd).Common();
((B).chd).Common();
chd.A1();
chd.B1();
分析:其實上面兩個規則應該很好理解:
對於同名的,那肯定是要說明是誰的方法啊,否則子類哪知道呢~~,不帶存取修飾詞,那預設是private,好讓子類只能得到兩個介面的同名函數中的一個~~。
對於不同名的,那必須為public啊,好讓子類繼承啊~~
一些小技巧
[email protected]的作用
1.使用在字串前面,讓"\"變成一般字元而非逸出字元
eg:string filePath = @"C:\text\text1";
2.表示跨行字串
string multiRows = @"Line1
Line2
Line3"; //蠻好的,省的一行字串寫太長不方便看
3.在系統保留的關鍵詞面前加上,可以當做一般字元使用
2.using 略~~
參數修飾符
1.params
parms是用來修飾數組的,一個函數中最多隻能有一個可變參數】
eg:public static void UseParams(params int []list)
{
...
}
傳參時,可以UseParams(1,‘a‘,3)或是 int []array = new int[3]{1,2,3}; Useparams(array);
2. out 和ref
out和ref差不多,都是傳引用。就如C++中的,普通傳參,形參的改變不會影響到實參。如果是指標或引用做為參數的話,就會形參的改變影響到實參。而
out和ref就是引用,用法有些許不同罷了。
區別:
1.out的實參不需要初始化,初始化也沒用,傳參是初始化的實參會被清空,只剩下地址,沒有資料,並且在函數結束之前必須賦值!
而ref的一定要初始化。
2.其實out一般用來獲得方法的多個傳回值,這裡的傳回值並不是return .., 而是,比如
static void Split(String name, out string firstnames, out string lastname)
{
int i = name.LastIndexOf(‘ ‘);
firstNames = name,Substring(0,i); //第一個傳回值
lastName = name.Substring(i+1); //第二個傳回值
}
3.ref一般是用來獲得函數的一個傳回值。並且一定要初始化。
注意點:
1.定義和調用時都要寫out/ref
2.二者都能和普通傳參構成重載,但相互之間不能構成重載(想想也差不多是這麼回事吧~~)
C#拾遺(一)