varios vacio una propiedades objetos objeto metodos lista formas dinamico crear como c# .net

c# - vacio - formas en javascript



¿Cómo puedo crear métodos de prototipos(como JavaScript) en C#.Net? (4)

Necesita crear un método de extensión, que requiere .NET 3.5. El método debe ser estático, en una clase estática. El primer parámetro del método debe ir precedido de "this" en la firma.

public static string MyMethod(this string input) { // do things }

Entonces puedes llamarlo así

"asdfas".MyMethod();

¿Cómo es posible crear métodos prototipo en C # .Net?

En JavaScript, puedo hacer lo siguiente para crear un método de recorte para el objeto de cadena:

String.prototype.trim = function() { return this.replace(/^/s+|/s+$/g,""); }

¿Cómo puedo hacer esto en C # .Net?


No puede agregar dinámicamente métodos a clases o objetos existentes en .NET, excepto al cambiar el origen de esa clase.

Sin embargo, en C # 3.0, puede usar métodos de extensión, que parecen métodos nuevos, pero son mágicos en tiempo de compilación.

Para hacer esto por tu código:

public static class StringExtensions { public static String trim(this String s) { return s.Trim(); } }

Para usarlo:

String s = " Test "; s = s.trim();

Esto parece un nuevo método, pero se compilará de la misma manera que este código:

String s = " Test "; s = StringExtensions.trim(s);

¿Qué estás tratando de lograr exactamente? Tal vez hay mejores formas de hacer lo que quieres?


Parece que estás hablando de los métodos de extensión de C #. Agregue funcionalidad a clases existentes insertando la palabra clave "this" antes del primer parámetro. El método tiene que ser un método estático en una clase estática. Las cadenas en .NET ya tienen un método "Trim", así que usaré otro ejemplo.

public static class MyStringEtensions { public static bool ContainsMabster(this string s) { return s.Contains("Mabster"); } }

Así que ahora cada cadena tiene un método ContainsMabster tremendamente útil, que puedo usar así:

if ("Why hello there, Mabster!".ContainsMabster()) { /* ... */ }

Tenga en cuenta que también puede agregar métodos de extensión a las interfaces (por ejemplo, IList), lo que significa que cualquier clase que implemente esa interfaz también seleccionará ese nuevo método.

Cualquier parámetro adicional que declare en el método de extensión (después del primer parámetro "this") se trata como parámetros normales.


Usando el compilador 3.5 puedes usar un Método de Extensión:

public static void Trim(this string s) { // implementation }

Puede usar esto en un proyecto específico de CLR 2.0 (compilador 3.5) incluyendo este truco:

namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly)] public sealed class ExtensionAttribute : Attribute { } }