C#學習筆記(五)

1、里氏轉換

    里氏轉換需滿足的條件:

1)、子類可以賦值給父類;

2)、如果父類中裝的是子類對象,那麼可以將這個父類強轉爲子類對象。

里氏轉換經常用到,如果有一個地方需要父類作爲參數,我們可以給一個子類對象。上一篇文章提到過Object是所有類的父類,Console類的WriteLine(Object param)方法就是以Object類對象作爲參數,所以我們可以傳入int、double、string等等類型的對象,在這個過程中就是進行了里氏轉換,對應的是第一種條件。

對於第二種條件,如下

Person p=new Student();//父類存的是子類對象
Student s=(Student)p;//將父類強轉爲子類對象
//其中Person是Student的父類

我們在進行里氏轉換前,經常使用兩個方法來進行判斷

1)、is:表示類型轉換,如果能夠轉換成功,則返回一個true,否則返回一個false.

Person p=new Student();
if(p is Teacher)//Teacher也是Person的子類,但沒有滿足上面的兩個條件,因此不能進行里氏轉換,故會執行else語句
{
   Teacher ss=(Teacher)p;
}
else
{
   Console.WriteLine("轉換失敗");
}

2)、as:如果可以轉換,則返回一個轉換後的對象,如果不能轉換,則返回null。

Teacher t=p as Teacher;
//因爲不能轉換,因此此時的t是null。

2、ArrayList集合

    其在System.Collections命名空間裏面

    集合相對於數組的優勢:長度可以任意改變;類型隨便。

    元素的訪問形式和數組一樣,都是利用下標進行訪問。

ArrayList list=new ArrayList();
list.Add(1);
list.Add(3.14);
list.Add(50000m);
list.Add("你好");
//集合遍歷還是用for循環,只是是利用Count這個屬性
for(int i=0; i<list.Count;i++)
{
   Console.WriteLine(list[i]);
}

注:將一個類對象打印到控制檯,默認情況下打印的是這個對象所在類的命名空間。

Person p=new Person();
ArrayList list=new ArrayList();
list.Add(p);
Console.WriteLine(list[0]);
//此處打印的是對象p所對應的類Person所在的命名空間

添加單個元素的時候使用Add,添加集合的時候就使用AddRange。

char[] c={'m','n','s','f'};
list.AddRange(c);

ArrayList還有很多的函數來幫助我們處理集合,像Clear\Remove\RemoveAt\RemoveRange\Insert等,可根據自己的實際需求查閱相關資料。

3、Hashtable集合

    一般稱爲鍵值對集合,類似於字典,根據鍵值去找相應的值,二者是一一對應的。其也在System.Collections中。

Hashtable ht=new Hashtable();
ht.Add(1,"張三");
ht.Add(2,'男');
ht.Add('age',23);
ht[3]=100;
//通過鍵值去遍歷集合的值
foreach(var item in ht.Keys)
{
   Console.WriteLine(ht[item]);
}
//另一種遍歷的方式直接遍歷集合中的值
foreach(var item in ht.Values)
{
   Console.WriteLine(item);
}

注:關鍵字var是根據值去推斷其類型,對於Hashtable的遍歷剛好使用,因爲Hashtable中的鍵值可以是各種類型,因此不能通過ArrayList集合的for循環來進行遍歷。爲什麼我們平時很少用var?因爲var在聲明一個變量的時候必須爲其賦值以確定其類型,而不能先聲明變量再去賦值。

注:鍵值對集合中,鍵必須是唯一的,但值可以是重複的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章