C#中析構函數,命名空間及字符串的運用(Ninth day)
又到了總結知識的時間了,今天在雲和學院學習了析構函數,命名空間及字符串的處理,現在就為大家總結下來。
理論:
析構函數
不能在結構中定義析構函數。只能對類使用析構函數。
一個類只能有一個析構函數。
無法繼承或重載析構函數。
無法調用析構函數。它們是被自動調用的。
析構函數既沒有修飾符,也沒有參數。
命名空間
•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();
}