流程控制
if判斷式,應該不用多做解釋
而swith使用上一要注意兩個地方:
1. 運算式的結果必須為整數、列舉或字串
2. 如果沒有使用break離開,會一直做下去
switch(aa)
{
case a : MessageBox.Show("Hello");
case b : MessageBox.Show("Hi");
case c : MessageBox.Show("你好");
}
如果結果是b,會印"Hi"、"你好"
因為沒有使用break,會從找到的結果以下一直做,做到看到break為止
迴圈:for、foreach、while、do
比較要注意的是break和continue的使用
for( int i = 0; i<100; i++)
{
j += i;
if (i == 50)
break;
if(i == 25)
continue;
j +=1;
}
上述程式碼會從1加到50而不是100,因為在50就break了
而每次加都會多加一,只有在25的時候不會,因為遇到continue關鍵字會從下一個迴圈繼續做
忽略continue以下全部的程式碼
例外狀況處理
catch的時候,可以多重catch
不過要子代先catch再catch父代,不然會造成compile time error
而finally則是一定會做的事情
就算在try catch遇到return關鍵字也會做
補充
int? a = null;
int b;
b = a?? 6;
Nullable
int b;
b = a.HasValue ? a.Value : 6 ;
上面兩段是完全一樣的程式
第六章:陣列、泛形與集合
補充:
1.
Hashtable的item是DictionaryEntry
而Dictionary<>的item則是KeyValuePair<>
2.
陣列不能唯獨、速度快;集合則剛好相反
第七章:物件導向與法
下列的資料會自動初始化:
static變數、實體變數、陣列中的元素
partial method
1. 只能存在於partial class中
2. 不可有回傳值(void)
3. 隱含為private,不可改變,也不需註明
4. 不能建立委派(delegate)到部份方法
5.若沒有實作,則會忽略呼叫
建構子
overload時,若需呼叫自己或副類別建構子
使用this和base關鍵字
public A(int a) { this.age = a; }
public A() : this(15) {}
public A() : base(16) {}
上述程式碼就可以在建構子間作呼叫
補充
using QQ = System.Web.UI.MobileControls;
...(略)
QQ.List a = new QQ.list;
第八章:物件導向進階
class內屬性的唯讀,可參考下列程式碼
public EmpName { get; private set; }
不同於interface的private set
interface若宣告某個屬性只有get,實作的class則可決定要不要有set;
但interface內若宣告private set;實作的class則一定只能get
覆寫和隱藏
父類別使用virtual關鍵字的method,表示可以給子類別用override關鍵字作覆寫
若子類別沒有使用override關鍵字,則可用new來隱藏父類別方法,無論覆類別有沒有virtual
狀況一
父親:public virtual void AA() { MessageBox.Show("Hello"); }
兒子:public override void AA() { MessageBox.Show("Hi"); }
狀況二
父親:public void AA() { MessageBox.Show("Hello"); }
兒子:public new void AA() { MessageBox.Show("Hi"); } (new可忽略,但若四級警告會錯誤)
父親 a = new 兒子();
a.AA()
狀況一會顯示Hi,而狀況二會顯示Hello
沒有留言:
張貼留言