new、sealed、版本控制new 關鍵字用途new MyClass())。public new void Method())。sealed 修飾詞sealed class A)。sealed override void Method())。override:明確覆寫基類別 virtual 方法。new:隱藏基類別方法(非多型行為)。核心差異:類別可實作多個介面,但只能繼承單一抽象類別(或任何具體類別)。抽象類別可包含實作與狀態;介面僅定義契約(C# 8.0 前)。
事件使用委派聲明;委派封裝方法供匿名呼叫;事件是類別允許用戶端註冊處理方法的委派介面。
public class A { public A() { Console.WriteLine("A"); } }
public class B { public B() { Console.WriteLine("B"); } }
public class C : A { B newb = new B(); } // 欄位初始化先於基類別建構函式
class MainClass { public static void Main() { C newc = new C(); } }
輸出: B → A(欄位初始化 → 基類別建構函式 → 衍生類別建構函式)。
public C() { Console.WriteLine("C"); }輸出: B → A → C。
public class A {
public virtual void MyMethod(int num) { num += 10; Console.WriteLine(num); }
}
public class B : A {
public override void MyMethod(int num) { num += 50; Console.WriteLine(num); }
}
class MainClass {
public static void Main() {
A a = new A(); a.MyMethod(2); // 12
B b = new B(); b.MyMethod(2); // 52
}
}
Object)class Node {
object m_data; Node m_next;
public Node(object data, Node next) { m_data = data; m_next = next; }
public object Data { get { return m_data; } }
public Node Next { get { return m_next; } }
public override string ToString() { return m_data.ToString(); }
}
Node<T>)class Node {
T m_data; Node m_next;
public Node(T data, Node next) { m_data = data; m_next = next; }
public T Data { get { return m_data; } set { m_data = value; } }
public Node Next { get { return m_next; } set { m_next = value; } }
public override string ToString() { return m_data.ToString(); }
}
class LinkedList {
static void Main() {
// 泛型整數鏈結串列
Node head = new Node(5, null);
head = new Node(10, head);
head = new Node(15, head);
int sum = 0;
for (Node cur = head; cur != null; cur = cur.Next)
sum += cur.Data;
Console.WriteLine("Sum of nodes = {0}", sum); // 30
}
}