今天學習的還好吧,但是感覺太陌生啦,或許沒有接觸的人都感覺這個太抽象,但是其實不是啦,要理解啦就可以把構造函數好好地使用啦,但是在寫程序中出的問題還是難免的·
1.構造方法
•方法名和類名一樣,沒有返回值,連void都不用。
•構造函數可以有參數,new對象的時候傳遞函數參數即可
•如果不指定構造函數,則類有一個默認的無參構造函數。如果指定了構造函數,則不再有默認的無參構造函數,如果需要無參構造函數,則需要自己來寫。
•構造函數可以重載,也就是有多個參數不同的構造函數。
舉例:
•給前面寫的學生類添加構造方法.使在實例化學生類的時候可以通過構造方法對姓名性別年齡語數英等屬性賦值,也可以只對姓名和性別賦值.年齡默認為18歲,語數英成績默認為0分.
–張三 男 18 三科成績為:90 95 80
–小蘭 女 16 三科成績為:95 85 100
enum Gender { 男, 女 } class Student { public Student() { } string name; public string Name { set; get; } int age=18; //public int Age { set; get; } Gender gender; public Gender Gender { set; get; } int chinese; int math; int english=0; public Student( string n,int a,Gender g,int c,int m,int e) { name = n; age = a; gender = g; chinese = c; math = m; english = e; } public void say() { Console.WriteLine("名字為{0},今年{1}歲了,{2},三科成績為{3},{4},{5}", Name, age, Gender,chinese,math,english); } } class Program { static void Main(string[] args) { Student stu = new Student("張三", 18, Gender.男, 90, 85, 80); stu.say(); Console.ReadKey(); } }
這就是構造函數的方法,另外還有個就是給字段賦初值,下面這樣也可以實現傳參:
從結果看: 結果輸出了年齡18歲,即為初值。
2.寫一個Ticket類,有一個距離屬性(本屬性只讀,在構造方法中賦值),不能為負數,有一個價格屬性,價格屬性只讀,並且根據距離distance計算價格Price (1元/公里):
–0-100公里 票價不打折
–101-200公里 總額打9.5折
–201-300公里 總額打9折
–300公里以上 總額打8折
有一個方法,可以顯示這張票的信息.90公里90塊錢
class ticket { public ticket(int d) { if (distance < 0) { distance = 0; } this.distance = d; } int distance; public int Distance { get { return distance; } } double price = 500; public double Price { get { if (distance > 0 && distance <= 100) { return distance; } else if (distance > 100 && distance <= 200) { return distance * 0.95; } else if (distance > 200 && distance <= 300) { return distance * 0.90; } else { return distance * 0.80; } } } } } class Program { static void Main(string[] args) { ticket a = new ticket(155); Console.WriteLine(a.Price); Console.ReadKey(); } }
這就是構造方法。
2.字段與屬性
簡單的說下,就是前面有-的都是字段,+的為屬性和方法。
3.命名空間
•namespace(命名空間),用於解決類重名問題,可以看做“類的文件夾”。
•如果代碼和被使用的類在一個namespace則不需要using。
•在不同命名空間下的類調用有兩種方法:
–寫全稱 命名空間.類名
–先using引用命名空間,再調用
4.字符串的處理
•string可以看做是char的只讀數組。char c = s[1];。例子:遍歷輸出string中的每個元素。
•C#中字符串有一個重要的特性:不可變性,字符串一旦聲明就不再可以改變。所以只能通過索引來讀取指定位置的char,不能對指定位置的char進行修改。
•如果要對char進行修改,那么就必須創建一個新的字符串,用s. ToCharArray()方法得到字符串的char數組,對數組進行修改后,調用new string(char[])這個構造函數(暫時不用細研究)來創建char數組的字符串。一旦字符串被創建,那么char數組的修改也不會造成字符串的變化。例子:將字符串中的A替換為a。
•練習一:隨機輸入你心中想到的一個名字,然后輸出它的字符串長度 Length:可以得字符串的長度
enum Gnder { } class Program { static void Main(string[] args) { Console.WriteLine("名字"); Length(Console.ReadLine()); Console.ReadKey(); } static void Length(string name) { Console.WriteLine(name.Length); } }
•一切類型都可以調用.ToString()方法轉換成字符串類型.
5.String類常用方法
•ToLower():得到字符串的小寫形式。
•注意字符串是不可變的,所以這些函數都不會直接改變字符串的內容,而是把修改后的字符串的值通過函數返回值的形式返回。s.ToLower()與s=s.ToLower()
•ToUpper():得到字符串的大寫形式; Trim()去掉字符串兩端的空白。
•s1.Equals(s2, StringComparison.OrdinalIgnoreCase),兩個字符串進行比較不區分大小寫的比較。
•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)
今天在雲和學院學習了這些,也是我邁向面向面向對象的開始··························