Что такое VB.NET-эквивалент передачи 'this' в сигнатуре метода в C # .NET? - PullRequest
1 голос
/ 18 января 2011

Мой вопрос связан с примерами кода из профессиональных шаблонов проектирования ASP.NET Wrox Press. Загрузки кода в C #, но я работаю с примерами в VB.

Буду признателен, если кто-нибудь сможет объяснить, что означает «это» в следующей сигнатуре метода и какова будет эквивалентная сигнатура метода в VB.NET.

Вот пример кода (из стр.51) в вопросе:

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

Ответы [ 5 ]

4 голосов
/ 18 января 2011

Это метод расширения.Это указывает на то, что вы можете вызывать статический метод со следующим синтаксисом:

  products.Apply(strategy);

вместо

  WhateverClass.Apply(products, strategy);

В VB вы должны декорировать метод с атрибутом Extension

  <Extension()>
  Sub Apply(ByVal products as IList<Product>, ByVal discountStrategy as IStrategy)
    ...

Подробнее см. http://msdn.microsoft.com/en-us/library/bb384936.aspx

4 голосов
/ 18 января 2011

Это метод расширения , они реализованы в VB.NET

Синтаксис, который вам нужен:

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

например

3 голосов
/ 18 января 2011

Для метода расширения в VB вы используете ExtensionAttribute

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

Приведенный выше синтаксис не может быть 100%

0 голосов
/ 18 января 2011

this, используемый таким образом, обозначает метод расширения. теперь у вас есть метод Apply, который можно использовать на любом IList<Product>, как если бы он был методом-членом, поэтому вы можете вызывать его как

list.Apply(discountStrategy);

вместо

Apply(list, discountStrategy);

Действительно полезно избегать называть этот метод ApplyDiscountStrategyToListOfProducts и иметь множество Apply*ToListOf* методов.

Эквивалент VB здесь: http://msdn.microsoft.com/en-us/library/bb384936.aspx

0 голосов
/ 18 января 2011

Я думаю, что это для методов расширения. Не уверен, как они реализованы в VB.NET.

...