2011-01-15 20 views
18

私はこのコードスニペットについて興味:thisキーワードは、パラメータタイプの横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); 
    } 
    // ... 
}; 

何を意味するのでしょうか? C#の仕様であっても、どこのどこの情報も見つけられないようです。

答えて

24

これはextension methodです。

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

それは構文だけでうれしいです:これは、基本的にコンパイラによって書き換えられ

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

構文は、それがNetOutgoingMessageクラスのメンバーであったかのように、メソッドを呼び出すことができることを意味しますシュガー。

0

これは、Writeextension methodからNetOutgoingMessageクラスであることを示します。

2

これはextension methodの定義方法です。これは本質的に何を意味

は(this標識拡張メソッドのパラメータで)指定された型を使用する場合、この方法は、カプセル化静的クラスに含まれていても、そのような方法は、自動的に露出される、ということであるように:

対照的に、
var typeInstance = new TypeWithExtensionMethod(); 
typeInstance.ExtensionMethod(anyParametersRequiredButNotTypeInstance); 

は、可能です:

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

それはそれは拡張メソッドであることを意味します。 MSDN

0

NetOutgoingMessageクラスの拡張方法です。

こちらをご覧ください:link text

3

このキーワードは、パラメータの型に次は何を意味するのでしょうか?

これは拡張メソッドであることを意味します。

C#の仕様でもどこの情報も見つからないようです。

あなたが求める情報は、C#4仕様のセクション10.6.9にあります。