標籤:cin 種類 tor 兩種 override 裝箱 使用 區別 聲明
1、複習
屬性:保護欄位的
建構函式:初始化對象
初始化對象:給對象的每個屬性去賦值
什麼時候會調用建構函式:當我們new的時候
物件導向中需要注意的兩個關鍵字
this 1.代表當前類的對象 2.調用自己的建構函式
new 1.建立對象 2.隱藏從父類哪裡繼承過來的成員
base 調用父類的建構函式,在子類中調用父類的重名方法
什麼是類?
類是模子,確定對象將會擁有的特徵(屬性)和行為(方法)
什麼是對象?
對象是一個你能夠看得到,摸得著的具體實體-萬物皆對象(具體存在的東西)
類是模具,建立對象的模具,抽象的。
類是一種資料類型,使用者自訂的資料類型
類組成:欄位,屬性,方法,建構函式等
對象是具體的,是類的具體執行個體,對象具有屬性(特徵)和方法(行為)
類中包含了資料(用欄位表示)與行為(用方法(函數、功能)表示,方法為一塊具有名稱的代碼)
2、存取修飾詞
public 公開的,公用的
private 私人的,只能在當前類的內部訪問,類中成員們,如果不加存取修飾詞,預設就是private
procteced 受保護的,可以在當前類的內部訪問,也可以再該類的子類中訪問。
internal 在當前項目中都可以訪問。
procteced internal 在當前項目和改類的子類中都可以訪問
能夠修飾類的存取修飾詞只有兩個,Internal和public
3、常用的關鍵字
this
1.代表當前類的對象
2.調用自己的建構函式
base
調用父類的成員
new
1.建立對象
2.隱藏父類的成員
virtual
標記一個方法是虛方法
abstract
抽象的
override
重寫
interface
介面
partial
部分類
sealed
密封類:不允許被繼承,但可以繼承別人
return
1.在方法中返回要返回的值
2.立即結束本次方法
break
跳出當前迴圈
continue
結束本次迴圈,回到迴圈條件進行判斷
static
靜態
struct
結構
enum
枚舉
const
常量
4、虛方法,抽象方法
關於虛方法需要注意的幾點:
1.父類中如果有方法需要讓子類重寫,則可以將該方法標記為virtual
2.虛方法在父類中必須有實現,哪怕是空實現。
3.虛方法子類可以重寫(override),也可以不重寫
關於沖向方法注意的幾點:
1.需要用abstracy關鍵字標記。
2.抽象方法不能有任何方法實現。
3.抽象成員必須包含在抽象類別中。
4.由於抽象成員沒有任何實現,所以子類必須將抽象成員重寫。
5.抽象類別不能執行個體化,
抽象類別的作用:抽象類別的作用就是為了讓子類繼承。
6.抽象類別中可以包括抽象成員,可以包括有具體代碼的成員。
7.還有抽象方法不能用static修飾
5、介面
1.介面中只能包含方法(屬性、時間、索引器也都是方法)
2.介面中的成員都不能有任何實現。光說不做
3.介面不能被執行個體化
4.介面中的成員不能有任何存取修飾詞。(預設為public)
5.實現介面的子類必須將介面中的所有成員全都實現。
6.子類實現介面的方法時,不需要任何關鍵字,直接實現即可。
7.介面存在的意義就是為了多態。
介面是什嗎?什麼時候使用介面?使用介面的目的是什嗎?多態
鳥會飛 飛機也會飛
不能把飛提取出來作為父類,只能把飛寫成一個介面
public interface IFlyable
{
void fly();
}
public class Bird
{
}
public class QQ : Bird
{
}
public class Maque : Bird, IFlyable
{
public void fly()
{
Console.WriteLine("鳥會飛");
}
}
public class Plane:IFlyable
{
public void fly()
{
Console.WriteLine("飛機會飛");
}
}
IFlyable fly = new Maque();
fly.fly();
Console.ReadKey();
繼承,先寫父類,再寫介面
屬性
建構函式
重載,多態
6、字串
1.字串的不可變性
2.字串可以看做是char類型的唯讀數組
7.高效的StringBuilder
不需要開闢新的string空間,可以添加,拼接,插入,替換字串,最後再toString轉為string類型
StringBuilder sb = new StringBuilder();
sb.Append("張三");
sb.Append("李四");
sb.Append("王五");
sb.Append("趙六");
sb.Insert(1, 123);
sb.Replace("李四", "顏色");
sb.ToString();
Console.WriteLine(sb);
Console.ReadKey();
Console.ReadKey();
表格
StringBuilder sb = new StringBuilder();
sb.Append("<html>");
sb.Append("<head>");
sb.Append("</head>");
sb.Append("<body>");
sb.Append("<table border=‘1px‘ cellpadding=‘0px‘ cellspacing=‘0px‘>");
sb.Append("<tr>");
sb.Append("<td>星期一</td>");
sb.Append("<td>星期一</td>");
sb.Append("<td>星期一</td>");
sb.Append("<td>星期一</td>");
sb.Append("</tr>");
sb.Append("<tr>");
sb.Append("<td>星期一</td>");
sb.Append("<td>星期一</td>");
sb.Append("<td>星期一</td>");
sb.Append("<td>星期一</td>");
sb.Append("</tr>");
sb.Append("<tr>");
sb.Append("<td>星期一</td>");
sb.Append("<td>星期一</td>");
sb.Append("<td>星期一</td>");
sb.Append("<td>星期一</td>");
sb.Append("</tr>");
sb.Append("<tr>");
sb.Append("<td>星期一</td>");
sb.Append("<td>星期一</td>");
sb.Append("<td>星期一</td>");
sb.Append("<td>星期一</td>");
sb.Append("</tr>");
sb.Append("</table>");
sb.Append("</body>");
sb.Append("</html>");
webBrowser1.DocumentText = sb.ToString();
7、集合
ArraryList
Hashtable
List<T>
Dictionary<TKey,Tvalue>
//ArrayList list = new ArrayList();
//list.Add();
//list.AddRange();
//索引值對集合
//Hashtable ht = new Hashtable();
//ht.Add()
//List<int> list = new List<int>();
//list.Add(); 添加單個元素
//list.AddRange();添加集合
//list.Insert();插入
//list.InsertRange();插入集合
//list.Remove();移除
//list.RemoveAt();根據下標移除
//list.RemoveRange();移除一定範圍的元素
//list.Contains();判斷是否包含
//list.RemoveAll();
List<T>類似於ArrayList,ArrayList的升級版。
各種方法:Sort(),Max(),Min(),Sum()...
DIctionary<K,V>類似於Hashtable,Hashtable的升級版。
推薦使用泛型集合。
T,K,V就像一把鎖,鎖住集合值能存在某種特定的類型,這裡的T,K,V也可以是其它字母
泛型集合可以進行foreach遍曆,是因為實現了IEnumerable<T>具有了GetEnumerator()方法
//Dictionary<int, string> dic = new Dictionary<int, string>();
//dic.Add(1, "張三");
//dic.Add(2, "李四");
//dic.Add(3,"王五");
//dic.Add(4, "趙六");
////用add直接覆蓋添加會報錯
//dic[4] = "還是趙六";
//foreach (KeyValuePair<int,string> kv in dic)
//{
// Console.WriteLine("{0}-----{1}",kv.Key,kv.Value);
//}
//Console.ReadKey();
8、裝箱或者拆箱
裝箱:就是將實值型別轉換為參考型別
拆箱:就是將參考型別轉換為實值型別
實值型別:bool int double char struct enum decimal 棧
參考型別:string 數組 集合 interface object 自訂類 堆
拆箱或者裝箱的兩種類型必須具有整合
集合轉為數組
int[]Ji= list.ToArray();
集合初始化器
List<int> list = new List<int>() { 1, 2, 3, 5, 64, 589, 642, 0, 36, 1000 };
9、結構和類的區別
類型
結構:實值型別 棧
類:參考型別 堆
聲明的語言:class struct
在類中,建構函式裡,既可以給欄位賦值,也可以給屬性賦值。建構函式是可以重載的。
但是,在結構的建構函式當中,必須只能給欄位賦值
在結構的建構函式當中,我們需要給全部的欄位賦值,而不能去選擇的給欄位賦值
調用:
結構是否可以New?
在棧開闢空間 結構new 調用結構的建構函式
結構和類的建構函式:
相同點:不管是結構還是類,本身都會有一個預設的無參數的建構函式
不同點:當你在類中寫了一個新的建構函式之後,那個預設的無參數的建構函式都被幹掉了。
但是,在結構當中,如果你寫了一個新的建構函式,那個預設的無參數的建構函式依然在。
如果我們只是單純的儲存資料的話,我們推薦使用結構。
因為結構的值是分配在棧上的,比較節省空間的。單純的儲存資料,不涉及物件導向。
如果我們想要使用物件導向的思想來開發程式,我們推薦使用我們的Class,因為結構不具備物件導向的特徵
C#基礎筆記(第二十天)