2011-01-15 14 views
18

Sono curioso di questo frammento di codice:questo parametro modificatore in 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); 
    } 
    // ... 
}; 

Che cosa significa la parola this accanto al tipo di parametro? Non riesco a trovare alcuna informazione su di esso, anche nelle specifiche C#.

risposta

24

Questo è un extension method.

La sintassi significa che è possibile chiamare il metodo, come se fosse un membro della classe NetOutgoingMessage:

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

Questo è fondamentalmente riscritta dal compilatore per:

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

E 'solo bello sintattica zucchero.

2

Questo è il modo in cui è definito un extension method.

Ciò significa in sostanza è che, anche se questo metodo è contenuto in una classe statica incapsulante, quando si utilizza il tipo specificato (nei parametri di metodo estensione etichettate this) tale metodo sarà esposto automaticamente in modo tale che:

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

è possibile, a differenza:

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

ciò significa che è un metodo di estensione. MSDN

0

È il metodo di estensione per la classe NetOutgoingMessage.

vedere qui: link text

3

Che cosa significa la parola chiave this accanto al tipo di parametro?

Significa che il metodo è un metodo di estensione.

Non riesco a trovare alcuna informazione su di esso, anche nelle specifiche C#.

Le informazioni cercate sono nella sezione 10.6.9 della specifica C# 4.

Problemi correlati