Разделяемые методы
Обновлен: Ноябрь 2007
Разделяемые методы позволяют разработчикам использовать другую логику в коде. Обычно код является частью класса, созданного разработчиком. Разделяемые методы определяются в разделяемом классе, созданном генератором кода, и они обычно используются для предоставления уведомлений о том, что объект был изменен. Они позволяют разработчику указать пользовательское поведение в ответ на изменение.
Конструктор генератора кода определяет только подпись метода и один или несколько вызовов метода. Разработчики могут затем предоставить реализации метода при необходимости изменения поведения созданного кода. Если реализации не указаны, вызовы методов удаляются компилятором, что позволяет сократить потери производительности.
Объявление
Созданный код помечает определение разделяемого метода, вставляя ключевое слово Partial в начале строки подписи.
Partial Private Sub QuantityChanged()
End Sub
Определение должно удовлетворять следующим условиям:
Метод должен иметь тип Sub, а не Function.
Тело метода необходимо оставить пустым.
Модификатор доступа должны иметь тип Private.
Реализация
В основном реализация состоит из заполнения тела разделяемого метода. Реализация находится обычно в отдельном разделяемом классе из определения и создается разработчиком, который стремится расширить созданный код.
Private Sub QuantityChanged()
' Code for executing the desired action.
End Sub
Вариант предыдущего примера точно дублирует подпись в объявлении, но возможны также другие варианты. В частности, могут быть добавлены другие модификаторы, например Overloads или Overrides. Разрешается использование только одного модификатора Overrides. Дополнительные сведения о модификаторах метода см. в разделе Оператор Sub (Visual Basic).
Применение
Вызовите разделяемый метод таким же образом, как вызывается любая другая процедура Sub. Если метод был реализован, вычисляются аргументы и выполняется тело метода. Однако следует помнить, что реализация разделяемого метода необязательна. Если метод не реализован, то вызывать его не эффективно, и выражения, передаваемые как аргументы в метод, не вычисляются.
Пример
В файле Product.Designer.vb определите класс Product, имеющий свойство Quantity.
Partial Class Product
Private _Quantity As Integer
Property Quantity() As Integer
Get
Return _Quantity
End Get
Set(ByVal value As Integer)
_Quantity = value
QuantityChanged()
End Set
End Property
' Provide a signature for the partial method.
Partial Private Sub QuantityChanged()
End Sub
End Class
В файле Product.vb создайте реализацию для QuantityChanged.
Partial Class Product
Private Sub QuantityChanged()
MsgBox("Quantity was changed to " & Me.Quantity)
End Sub
End Class
Наконец, в методе Main проекта объявите экземпляр Product и укажите начальное значение для его свойства Quantity.
Module Module1
Sub Main()
Dim product1 As New Product With {.Quantity = 100}
End Sub
End Module
Появится окно, которое выводит сообщение:
Quantity was changed to 100
См. также
Основные понятия
Добавление бизнес-логики с помощью разделяемых методов (LINQ to SQL)