2011-01-15 9 views
18

Tengo curiosidad acerca de este fragmento de código:este modificador de parámetro en C#?

public static class XNAExtensions 
{ 
    /// <summary> 
    /// Write a Point 
    /// </summary> 
    public static void Write(this NetOutgoingMessage message, Point value) 
    { 
     message.Write(value.X); 
     message.Write(value.Y); 
    } 
    // ... 
}; 

¿Qué significa junto al tipo de parámetro de la palabra clave this? Parece que no puedo encontrar ninguna información al respecto en ninguna parte, incluso en la especificación C#.

Respuesta

24

Eso es extension method.

La sintaxis significa que se puede llamar al método como si fuera un miembro de la clase NetOutgoingMessage:

var msg = new NetOutgoingMessage(); 
msg.Write(somePoint); 

Esto es básicamente reescrito por el compilador para:

var msg = new NetOutgoingMessage(); 
XNAExtensions.Write(msg, somePoint); 

Es agradable sintáctica azúcar.

2

Así es como se define extension method.

Lo que esto significa esencialmente es que, a pesar de que este método está contenido en una clase estática encapsulación, cuando se utiliza el tipo especificado (en los parámetros del método de extensión marcados this) un método tal estará expuesto automáticamente tal que:

var typeInstance = new TypeWithExtensionMethod(); 
typeInstance.ExtensionMethod(anyParametersRequiredButNotTypeInstance); 

es posible, en lugar de:

var type = new TypeWithExtensionMethod(); 
ExtensionMethods.ExtensionMethod(typeInstance, anyOtherParametersRequired); 
0

Esto significa que es un método de extensión. MSDN

0

Es el método de extensión para la clase NetOutgoingMessage.

ve aquí: link text

3

¿Qué significa la palabra clave this junto al tipo de parámetro?

Significa que el método es un método de extensión.

No puedo encontrar ninguna información al respecto en ninguna parte, incluso en la especificación C#.

La información que busca se encuentra en la sección 10.6.9 de la especificación C# 4.

Cuestiones relacionadas