reservadas - params c#
¿Qué significa ''esta'' palabra clave en un parámetro de método? (2)
Así es como funcionan los métodos de extensión en C #. La función de métodos de extensión le permite ampliar los tipos existentes con métodos personalizados. La palabra clave this [TypeName]
en el contexto de los parámetros del método es el type
que desea extender con sus métodos personalizados, this
se usa como un prefijo, en su caso, HtmlHelper
es el type
a extender y BeginForm
es el método que debería extiéndelo.
Eche un vistazo a este método de extensión simple para el tipo de string
:
public static bool BiggerThan(this string theString, int minChars)
{
return (theString.Length > minChars);
}
Puedes usarlo fácilmente en un objeto de string
:
var isBigger = "my string is bigger than 20 chars?".BiggerThan(20);
Referencias:
Una referencia bien documentada sería: Cómo: Implementar y llamar a un método de extensión personalizado (Guía de programación de C #)
Una referencia más particular sobre los métodos de extensión en ASP.NET MVC sería: Cómo crear métodos de extensión MVC personalizados
Esta pregunta ya tiene una respuesta aquí:
- ¿Qué son los métodos de extensión? 10 respuestas
namespace System.Web.Mvc.Html
{
// Summary:
// Represents support for HTML in an application.
public static class FormExtensions
{
public static MvcForm BeginForm(this HtmlHelper htmlHelper, string actionName, string controllerName);
...
}
}
Me he dado cuenta de que el objeto ''este'' delante del primer parámetro en el método BeginForm no parece ser aceptado como un parámetro. Parece que en los métodos reales de BeginForm funcionan como:
BeginForm(string actionName, string controllerName);
omitiendo el primer parámetro. Pero en realidad recibe ese primer parámetro de alguna manera de manera oculta. ¿Me puede explicar cómo funciona esta estructura? En realidad estoy explorando MVC 4 Internet Sample. Gracias.
Métodos de extensión:
Un "perno en" forma de extender un tipo existente. Le permiten extender un tipo existente con una nueva funcionalidad, sin tener que subclasificar o recompilar el tipo anterior. Por ejemplo, le gustaría saber si una determinada cadena fue un número o no. O es posible que desee tener la función Mostrar () Ocultar () en los formularios Web de ASP.net para los controles.
Por ejemplo:
public static class MyExtensionMethods
{
public static void Show(this Control subject)
{
subject.Visible = true;
}
public static bool IsNumeric(this string s)
{
float output;
return float.TryParse(s, out output);
}
}
Edición: Para obtener más información, puede ver la documentación de MSDN en: msdn.microsoft.com/en-us/library/vstudio/bb383977.aspx que amablemente se vinculó con @aush.
Disfruté leyendo "C # en profundidad" sobre los métodos de extensión. Hay un extracto disponible aquí: http://my.safaribooksonline.com/book/programming/csharp/9781935182474/extension-methods/ch10lev1sec3
Por supuesto, puede comprar el libro en línea o simplemente hacer una investigación sobre cómo funciona todo bajo el capó utilizando Google.