2011-01-17 6 views
1

私の質問は、Wrox PressのProfessional ASP.NET Design Patternsのコードサンプルに由来しています。コードのダウンロードはC#で行われていますが、私はVBでサンプルを処理しています。C#.NETのメソッドシグネチャで 'this'を渡すのと同等のVB.NETは何ですか?

誰かが次のメソッドシグネチャで 'これ'が意味することと、同等のメソッドシグネチャがVB.NETでどのようなものであるかを説明できるのであれば、私は感謝します。ここで

は(P.51)からのサンプルコードは、問題のある:

public static void Apply(this IList<Product> products, IDiscountStrategy discountStrategy) { ... }

答えて

4

これは拡張メソッドです。 VBで

WhateverClass.Apply(products, strategy); 

にとは対照的に、あなたはExtension属性

<Extension()> 
    Sub Apply(ByVal products as IList<Product>, ByVal discountStrategy as IStrategy) 
    ... 
と方法を飾るでしょう

products.Apply(strategy); 

:これは、あなたが次の構文を使用して静的メソッドを呼び出すことができることを示しています

詳細についてはhttp://msdn.microsoft.com/en-us/library/bb384936.aspxを参照してください。

+0

8秒、とほとんど同じ。偉大な心は同じように考える。 –

+0

ありがとうございます。 MSDNリンクがVB.NETバージョンのソリューション(C#の実装とは対照的)を指していて、Johnの直前に投稿されたので、私はあなたの答えを受け入れました。 –

+0

vb.net拡張メソッドとの1つの違いは、最初のパラメータを 'ByRef'として受け入れることができることです。残念ながら、vb.netでは、読み取り専用構造(通常は偽のコードを生成するばかげた構造)でこのようなメソッドを使用することができますが、これは構造体では便利なことがあります。C#では、拡張メソッドの '' this'パラメータを 'ref'として宣言することはできません。また、' this'の 'ref'パラメータでvb.net拡張メソッドを呼び出すこともできません。 – supercat

0

私はそれが拡張メソッドのためだと思います。それらがVB.NETでどのように実装されているかわかりません。

3

あなたはExtensionAttribute

<Extension()> 
Public Sub Apply(IList(of Product) products, IDiscountStrategy discountStrategy) 
    '... 
End Sub 

を使用するVBでの拡張メソッドの場合は上記の構文は、100%

4

ではないかもしれないこれは、彼らはあなたが必要VB.NET

構文で実装されているextension methodです:

<Extension()> 
Public Sub Print(ByVal aString As String) 
    Console.WriteLine(aString) 
End Sub 

例えば、

0

01したがって、は、拡張方法を意味する。あなたは今ではメンバーメソッドであるかのように任意の​​で使用することができますApply方法を持っているので、あなたは代わりのようなの

list.Apply(discountStrategy); 

のようにそれを呼び出すことができます

Apply(list, discountStrategy); 

そのことを避けるために本当に便利その方法の名前をApplyDiscountStrategyToListOfProductsとし、Apply*ToListOf*トンの方法を有する。

VBと同等はここにある:私の前にhttp://msdn.microsoft.com/en-us/library/bb384936.aspx

関連する問題