首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 2.0 新特性深度解析(七):遞迴迭代器實作二叉樹中序遍歷與部分類型

     編輯:關於C語言

遞迴迭代器:二叉樹中序遍歷

迭代器(`yield return`)極大簡化遞迴資料結構遍歷。二叉樹節點:


class Node { public Node Left, Right; public T Item; }

樹類別提供 `Add(params T[])` 與 `InOrder` 屬性:


public IEnumerable InOrder => ScanInOrder(_root);

IEnumerable ScanInOrder(Node node)
{
    if (node == null) yield break;
    foreach (var item in ScanInOrder(node.Left)) yield return item;
    yield return node.Item;
    foreach (var item in ScanInOrder(node.Right)) yield return item;
}

使用:


var tree = new BinaryTree();
tree.Add(4,6,2,7,5,3,1);
foreach (int n in tree.InOrder) Trace.WriteLine(n); // 1,2,3,4,5,6,7

效能警示

  • 每次 `ScanInOrder` 遞迴呼叫生成新迭代器物件,深度 n 樹產生 n 個迭代器,同時存活 log n 個。
  • 大樹易觸發 Gen 0 GC,影響效能。替代:手動堆疊/佇列迭代避免物件分配。

部分類型

C# 2.0 `partial class` 允許單一類別定義分散多檔案:


// File1.cs
public partial class MyClass { public void Method1() {} }
// File2.cs
public partial class MyClass { public void Method2() {} public int Number; }
  • 支援 `class`、`struct`、`interface`,不支援 `enum`。
  • 編譯期合併為單一型別。

應用場景

  1. 機器生成碼隔離:Web Service Proxy、ASP.NET 2.0 Code-beside、WinForms `InitializeComponent`、設計器生成碼。重新生成不覆寫手寫邏輯。
  2. 團隊並行開發:多人同時修改同一類別不同部分,版控衝突極小。
  3. 累積與非累積特性:介面實作、成員、方法為累積(合併);基底類別、泛型約束為非累積(衝突報錯)。

介面實作累積範例


public partial class MyClass {}
public partial class MyClass : IMyInterface
{
    public void Method1() {}
    public void Method2() {}
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved