首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 委托與作用域疑問:命名空間層級聲明委托的合法性及 Thread.Join() 行為

     編輯:程式設計綜合問答

問題 1:委托聲明位置

public delegate void ExampleCallback(int lineCount); 直接寫在命名空間下,不在任何類中,為何合法?

解釋

  • C# 允許**委托類型**、**枚舉**、**接口**、**類**、**結構體**直接聲明在命名空間中 (或文件頂層),不必包裹在類內部。
  • 「所有可執行代碼必須在類中」指的是**語句/表達式** (如方法調用、賦值、循環),**類型聲明** (delegate, class, enum, interface, struct) 可直接屬於命名空間。
  • ThreadWithState 類中使用 ExampleCallback 時,編譯器在當前命名空間及引用的命名空間中查找類型,故可見。

問題 2:Thread.Join() 行為

若 t.Start() 很快執行完,t.Join() 是否仍起作用?

解釋

  • 是的,完全正常。 Join() 調用時,若線程已結束,會**立即返回**,不阻塞。
  • 若線程尚在運行,Join() 阻塞調用線程直到目標線程終止。
  • 因此 Start() 後立即 Join() 是安全的標準等待模式,無論線程執行多快。

總結

  • 委托類型可直接聲明於命名空間,屬於類型聲明而非可執行代碼。
  • Thread.Join() 對已結束線程無阻塞,語義為「等待直到結束」,已結束即視為等待完成。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved