Реализация методов в специализированных элементах управления
Метод применяется в элементе управления точно так же, как и в любом другом компоненте.
В Visual Basic, если метод требуется для возврата значения, он выполняется как Public Function
. Если значение не возвращается, метод выполняется как Public Sub
. Методы объявляются согласно следующему синтаксису:
Public Function ConvertMatterToEnergy(Matter as Integer) As Integer
' Conversion code goes here.
End Function
Поскольку функции возвращают значения, в них необходимо указывать тип возвращаемого значения, например целое число, строка, объект и т. д. Также необходимо задавать аргументы Function
или процедуры Sub
(если есть).
В C# нет различий между функциями и процедурами, а Visual Basic — есть. Метод возвращает либо значение, либо ответ void
. Синтаксис объявления открытого метода C# выглядит следующим образом:
public int ConvertMatterToEnergy(int matter)
{
// Conversion code goes here.
}
При объявлении метода необходимо по возможности объявить все его аргументы и явные типы данных. Аргументы с ссылками на объекты должны быть объявлены как особые типы классов, например As Widget
вместо As Object
. В Visual Basic настройка по умолчанию Option Strict
применяет это правило автоматически.
Аргументы с типами позволяют компилятору выявлять ошибки разработчиков перед запуском, а не во время выполнения. Компилятор также отслеживает ошибки, а качество тестирования во время выполнения зависит от набора тестов.
Перегруженные методы
Если вы хотите разрешить пользователям элемента управления задавать для метода комбинации параметров, подготовьте несколько перегрузок метода с использованием явных типов данных. Не создавайте параметры, которые объявляются как As Object
и могут содержать любые типы данных, — это может привести к ошибкам, которые не будут обнаружены во время тестирования.
Note
Универсальный тип данных в среде CLR — это Object
, а не Variant
. Variant
удалено из языка.
Например, метод Spin
гипотетического элемента управления Widget
позволяет либо прямо определить направление и скорость вращения, либо определить другой объект Widget
, вращательный момент которого поглощается.
Overloads Public Sub Spin( _
ByVal SpinDirection As SpinDirectionsEnum, _
ByVal RevolutionsPerSecond As Double)
' Implementation code here.
End Sub
Overloads Public Sub Spin(ByVal Driver As Widget) _
' Implementation code here.
End Sub
public void Spin(SpinDirectionsEnum spinDirection, double revolutionsPerSecond)
{
// Implementation code here.
}
public void Spin(Widget driver)
{
// Implementation code here.
}