2011-07-21 25 views
6

Me pregunto si es posible agregar una nueva propiedad como propiedad de extensión a la clase de cadena. Lo que estoy buscando es algo como estoAgregar nueva propiedad a la clase de cadena C#

string.Empty 

me gustaría hacer una extensión, por ejemplo:

string.DisplayNone; 

¿Puedo añadir propiedades de extensión a la # clase string C que puedo llamar en una de manera similar a como lo hago string.Empty?

+2

No, no puede agregar un método de extensión estático porque los métodos de extensión requieren una instancia de un objeto – Chandu

+0

* forget it *. Jon dice que es imposible http://stackoverflow.com/questions/1676191/adding-an-extension-method-to-the-string-class-c/1676214#1676214 :) – naveen

+0

@Cybernate: Es correcto que no se puede agregue un método de extensión estático, pero no es porque un método de extensión requiera una instancia. Solo necesita una referencia del tipo correcto, pero la referencia puede ser nula. – Guffa

Respuesta

4

Sólo puede crear extensiones para los objetos ...

algo así:

class Program 
{ 
    static void Main(string[] args) 
    { 
     string x = "Hello World"; 
     x.DisplayNow(); 
    } 
} 

public static class StringExtension 
{ 
    public static void DisplayNow(this string source) 
    { 
     Console.WriteLine(source); 
    } 
} 

pero nunca he visto cómo se puede extender una estructura o una clase que nunca se ha inicializado.

4

Sí, puede hacer esto ... sin embargo, será un método de extensión, no una propiedad.

public static class Extensions 
{ 
    public static string DisplayNone(this string instance) 
    { 
     return "blah"; 
    } 
} 

que tendría que usarse (sin embargo hacky) como "".DisplayNone(); ya que requerirá una instancia de una cadena que se creará.

Si quisiera, sin embargo, otra manera un poco menos hacky sería la creación de una clase de ayuda ..

public static StringHelper 
{ 
    public static string DisplayNone() 
    { 
     return "blah"; 
    } 
} 
+0

No, llamar a un método de extensión no requiere una instancia de la clase. Solo necesita una referencia del tipo correcto, pero la referencia puede ser nula. – Guffa

0

Es posible que pueda crear su propio tipo de valor. Eso imita el tipo String con un método "DisplayName".

Sin embargo, no puedo ver por qué necesita "DisplayName" en el tipo? Tiene más sentido en la instancia de picadura. Es decir. "Hola" .DisplayName. Ver la respuesta de Smokefoot a esta pregunta.

Cuestiones relacionadas