2009-06-09 26 views
6

我敢肯定,答案是顯而易見的,我有點尷尬,我不知道答案已經存在,但考慮下面的代碼示例,我在閱讀「Professional ASP.NET MVC 1.0」時選擇了:當用作方法參數的前綴時,「this」是什麼意思?

public static class ControllerHelpers 
{ 
    public static void AddRuleViolations(this ModelStateDictionary modelState, IEnumerable<RuleViolation> errors) 
    { 
     foreach (RuleViolation issue in errors) 
      modelState.AddModelError(issue.PropertyName, issue.ErrorMessage); 
    } 
} 

我明白這是什麼靜態方法是幹什麼的,但我不明白的是什麼目的「本」在方法簽名服務的話。任何人都可以啓發我嗎?

回答

17

被稱爲extension method一個新的C#3.0的功能。

這意味着,您添加了新的方法,以你的ModelStateDictionary對象。您可以將它稱爲正常方法:

yourModelStateDictionary.AddRuleViolations(errors); 

請參閱第一個參數('this'-parameter)被跳過。它將ModelStateDictionary分配爲擴展方法的有效目標。

的線索是,你可以用任何類做到這一點 - 即使封存或第三方類,如.NET Framework類(例如對對象或字符串)。

+0

不能讓我的自我更好 – TWith2Sugars 2009-06-09 20:54:32

1

這意味着所討論的方法是一種「擴展方法」,並且可以被稱爲如果它是類本身的方法。看到這個article

1

它是一種推廣方法簽名,它的意思是「AddRuleViolations」將被視爲ModelStateDictionary的一種推廣方法。

來自MSDN。

擴展方法使您能夠 方法「添加」到現有各類沒有 創建一個新的派生型, 重新編譯,或者修改 原始類型。擴展方法 是一種特殊的靜態方法, ,但他們被稱爲好像他們是在擴展型 實例方法。 對於用C#和 Visual Basic編寫的客戶端代碼,在調用 擴展方法和實際在類型中定義 的方法之間並沒有明顯的差異 。

相關問題