Ich mache die Nerd Dinner tutorial für ASP.NET MVC und ich traf eine Konstruktion in der Sprache C#, die sehr seltsam schien. Der Titel dieser Frage ist ein wenig vage, weil ich Schwierigkeiten haben, zu definieren, was das ist. Das machte es auch schwierig für mich, über das Thema zu suchen, daher entscheide ich darüber eine Frage zu stellen.Eine statische Methode in einer Klasse deklarieren und als Methode einer anderen Klasse verwenden
Im Nerd Dinner tutorial ich das folgende Codefragment sehen:
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);
}
}
}
Und später zeigen sie:
//
// GET: /Dinners/Edit/2
public ActionResult Edit(int id) {
Dinner dinner = dinnerRepository.GetDinner(id);
return View(dinner);
}
//
// POST: /Dinners/Edit/2
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection formValues) {
Dinner dinner = dinnerRepository.GetDinner(id);
try {
UpdateModel(dinner);
dinnerRepository.Save();
return RedirectToAction("Details", new { id=dinner.DinnerID });
}
catch {
ModelState.AddRuleViolations(dinner.GetRuleViolations());
return View(dinner);
}
}
Die Teile, die mir Rätsel sind:
public static void AddRuleViolations(this ModelStateDictionary modelState, IEnumerable<RuleViolation> errors)
und
ModelState.AddRuleViolations(dinner.GetRuleViolations());
Es sieht so aus, als ob Sie die AddRuleViolations
-Funktion in der ControllerHelpers
-Klasse definieren und dann aufrufen, als ob es eine Instanzfunktion der ModelState
-Eigenschaft wäre. Ist diese Beobachtung richtig? Wenn ja, warum brauchen Sie das? Es scheint mir sehr seltsam, eine Methode in einer Klasse zu definieren, als ob es sich um eine Methode einer anderen Klasse war.
Hinweis: ModelState
ist eine Eigenschaft der aktuellen Klasse und keine Klasse selbst ein.
Ah danke. Ich konnte vorher nichts ohne das Schlüsselwort extension methods finden. –