標籤:style blog http io ar os 使用 sp strong
又到了總結知識的時間了,今天在雲和學院學習了解構函式,命名空間及字串的處理,現在就為大家總結下來。
理論:
解構函式
不能在結構中定義解構函式。只能對類使用解構函式。一個類只能有一個解構函式。無法繼承或重載解構函式。無法調用解構函式。它們是被自動調用的。解構函式既沒有修飾符,也沒有參數。
命名空間•namespace(命名空間),用於解決類重名問題,可以看做“類的檔案夾”。•如果代碼和被使用的類在一個namespace則不需要using。•在不同命名空間下的類調用有兩種方法:–寫全稱 命名空間.類名–先using引用命名空間,再調用(註:using可以聲明namespace的引入,還可以實現非託管資源的釋放,實現了IDisposiable的類在using中建立,using結束後會自動調用該對象的Dispose方法,釋放資源。)
字串處理string可以看做是char的唯讀數組。char c = s[1];•C#中字串有一個重要的特性:不可變性,字串一旦聲明就不再可以改變。所以只能通過索引來讀取指定位置的char,不能對指定位置的char進行修改。
* 如果要對char進行修改,那麼就必須建立一個新的字串,用s. ToCharArray()方法得到字串的char數組,對數組進行修改後,調用new string(char[])這個建構函式(暫時不用細研究)來建立char數組的字串。一旦字串被建立,那麼char數組的修改也不會造成字串的變化。•字串的串連+,兩邊只要有一個是字串類型,另一個也會被自動轉換成字串類型•一切類型都可以調用.ToString()方法轉換成字串類型.
String類常用方法
s1.Equals(s2,StringComparison.OrdinalIgnoreCase),兩個字串進行比較不區分大小寫比較。•
ToLower():得到字串的小寫形式。(這個在前面已經總結過)•
ToUpper():得到字串的大寫形式; Trim()去掉字串兩端的空白。(這個在前面已經總結過)•注意字串是不可變的,所以這些函數都不會直接改變字串的內容,而是把修改後的字串的值通過函數傳回值的形式返回。s.ToLower()與s=s.ToLower()•要區分變數名和變數指向的值的區別。程式中可以有很多字串,然後由字串變數指向他們,變數可以指向其他的字串,但是字串本身沒有變化。字串不可變性指的是記憶體中的字串不可變,而不是變數不變。
字串的分割•
string[] Split(params char[] separator):將字串按照指定的分割符分割為字串數組;•
string[] Split(char[] separator, StringSplitOptions options)將字串按照指定的char分割符分割為字串數組( options 取RemoveEmptyEntries的時候移除結果中的空白字串);
字串函數詳解•字串替換:string Replace(string oldValue, string newValue)將字串中的出現oldValue的地方替換為newValue。例子:名字替換。•取子字串:string Substring(int startIndex),取從位置startIndex開始一直到最後的子字串;•string Substring(int startIndex, int length),取從位置startIndex開始長度為length的子字串,如果子字串的長度不足length則報錯。•bool Contains(string value)判斷字串中是否含有子串value•bool StartsWith(string value)判斷字串是否以子串value開始;•bool EndsWith (string value)判斷字串是否以子串value結束;•int IndexOf(string value):取子串value第一次出現的位置。•Int IndexOf(string value,int startIndex)
實操:•
給前面寫的學生類添加構造方法.使在執行個體化學生類的時候可以通過構造方法對姓名性別年齡語數英等屬性賦值,也可以只對姓名和性別賦值.年齡預設為18歲,語數英成績預設為0分.
–張三 男 18 三科成績為:90 95 80
–小蘭 女 16 三科成績為:95 85 100*首先在定義一個類
class Student {//給前面寫的學生類添加構造方法.使在執行個體化學生類的時候可以通過構造方法對姓名性別年齡語數英等屬性賦值,也可以只對姓名和性別賦值.年齡預設為18歲,語數英成績預設為0分.//張三 男 18 三科成績為:90 95 80//小蘭 女 16 三科成績為:95 85 100 string name; string gender; int age=18; int chinese; int math; int english; public Student(string n,int a,string g,int c,int m,int e ) { name = n; age = a; gender = g; chinese = c; math = m; english = e; } public Student(string n, string g, int c, int m, int e) { name = n; gender = g; chinese = c; math = m; english = e; } public void Stt() { Console.WriteLine("大家好,我叫{0},是{1}同學,今年{2}歲,我的三科成績為:{3},{4},{5}", name, gender, age, chinese, math, english); } }
在Main函數裡寫
static void Main(string[] args) { Student stu1 = new Student("張三",18,"男",90,95,80); Student stu2 = new Student("小蘭",16,"女 ",95, 85,100); Student stu3 = new Student("小蘭", "女 ", 95, 85, 100); stu1.Stt(); stu2.Stt(); stu3.Stt(); Console.ReadKey(); }
運行結果是:
•寫一個Ticket類,有一個距離屬性(本屬性唯讀,在構造方法中賦值),不能為負數,有一個價格屬性,價格屬性唯讀,並且根據距離distance計算價格Price (1元/公裡):–0-100公裡 票價不打折–101-200公裡 總額打9.5折–201-300公裡 總額打9折–300公裡以上 總額打8折
有一個方法,可以顯示這張票的資訊.90公裡90塊錢
•測試上面的類.
class Ticket { #region 建構函式 public Ticket(int distance) { if(distance<0) { distance = 0; } this.distance = distance; } #endregion int distance; public int Distance { get { return distance; } } double price=500; public double Price { get { if(distance<=100 && distance>=0) { return distance * 1.0; } else if(distance>=101 && distance<=200) { return distance * 0.95; } else if(distance>=201 && distance<=300) { return distance * 0.9; } else { return distance*0.8; } } } public void Show() { Console.WriteLine("{0}公裡需要{1}錢",distance,price); } }
static void Main(string[] args) { Ticket t1 = new Ticket(110); Console.WriteLine(t1.Price); Console.ReadKey(); }
測試結果:這道題不知道哪裡出現問題了,結果並沒有運用到Show方法
隨機輸入你心中想到的一個名字,然後輸出它的字串長度 Length:可以得字串的長度
兩個學員輸入各自最喜歡的課程名稱, 判斷是否一致,如果相等,則輸出你們倆喜歡相同的課程. 如果不相同,則輸出你們倆喜歡不相同的課程.
讓使用者輸入一個日期格式如:2008-01-02,你輸出你輸入的日期為2008年1月2日
static void Main(string[] args) { Console.WriteLine("請輸入日期"); string date = Console.ReadLine(); string[] strs = date.Split(‘-‘); string datetine = strs[0] + "年" + strs[1] + "月"+strs[2]+"日" ; Console.WriteLine(datetine); Console.ReadKey(); }
今天就總結到這裡吧,下周一在繼續學習吧。加油!
C#中解構函式,命名空間及字串的運用(Ninth day)