程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C# 2.0的Specification(匿名方法)(二)(1)

C# 2.0的Specification(匿名方法)(二)(1)

編輯:關於C語言

21.7委托實例相等性

如下規則適用由匿名方法委托實例的相等運算符(§7.9.8)和object.Equals方法產生的結果。

l     當委托實例是由具有相同被捕獲外部變量集合的語義相同的匿名方法表達式計算而產生時,可以說(但不是必須)它們相等。

l     當委托實例由具有語義不同的匿名方法表達式,或具有不同的被捕獲外部變量集合時,它們決不相等。

21.8明確賦值

匿名方法參數的明確賦值狀態與命名方法是相同的。也就是,引用參數和值參數被明確的賦初值,而輸出參數不用賦初值。並且,輸出參數在匿名方法正常返回之前必須被明確賦值(§5.1.6)。

當控制轉換到匿名方法表達式的程序塊時,對外部變量v的明確賦值狀態,與在匿名方法表達式之前的v的明確賦值狀態是相同的。也就是,外部變量的明確賦值將從匿名方法表達式上下文被繼承。在匿名方法程序塊內,明確賦值將和在普通程序塊內一樣而得到演繹(§5.3.3)。

在匿名方法表達式之後的變量v的明確賦值狀態與在匿名方法表達式之前它的明確賦值狀態相同。

例如

delegate bool Filter(int i);
  
void F() {
  int max;
  
  // 錯誤,max沒有明確賦值
  Filter f = delegate(int n) { return n < max; }
  
  max = 5;
  DoWork(f);
}

將產生一個編譯時錯誤,因為max沒有在匿名方法聲明的地方明確賦值。示例

delegate void D();
  
void F() {
  int n;
  D d = delegate { n = 1; };
  
  d();
  
  //錯誤,n沒有明確賦值
  Console.WriteLine(n);
}

也將產生一個編譯時錯誤,因為匿名方法內n的賦值,對於該匿名方法外部n的明確賦值狀態沒有效果。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved