Иллюстрированный самоучитель по VB.NET



              


Механика реализации интерфейса - часть 3


Теперь вам не придется присваивать их промежуточным интерфейсным переменным. Пример:

Dim tom As New LeadProgrammer("Tom",65000) tom.SpendMoraleFund(500)

Однако в обратных преобразованиях приходится использовать функцию СТуре:

Dim tom As New LeadProgrammer("Tom". 65000)

Dim aLead As ILead.aName As String

aLead = tom

aName = Ctype(aLead. Programmer).TheName 'OK

Следующая строка недопустима:

aName =tom.TheName ' ЗАПРЕЩЕНО!

Ниже перечислены общие правила преобразования между типом объекта и интерфейсом, им реализуемым.

  • Переменную, объявленную с типом класса, всегда можно присвоить переменной, объявленной с типом любого из интерфейсов, реализуемых классом. В частности, если метод получает в качестве параметра переменную интерфейсного типа, ему можно передать переменную любого из типов, реализующих этот интерфейс (данное правило напоминает основной принцип наследования, в соответствии с которым производные типы всегда могут использоваться вместо базовых). Запомните следующее правило:

  • При переходе от переменной типа интерфейса к переменной типа, реализующего интерфейс, необходимо использовать функцию СТуре.

    Чтобы определить, реализует ли объект некоторый интерфейс, воспользуйтесь ключевым словом TypeOf в сочетании с Is. Пример:

    Dim torn As New LeadProgrammer("tom". 50000)

    Console.WriteLine((TypeOf (tom) Is Head))

    Вторая строка выводит значение True.

    Один метод может реализовывать несколько функций, определенных в одном интерфейсе:

    Public Sub itsOK Implements

    Interface1.Ml.Interfacel.M2,Interfacel.M3

    Ниже приведена полная версия класса LeadProgrammer. Конечно, реализация методов интерфейса выглядит несколько условно, однако опадает представление о том, что можно сделать при реализации интерфейса:

    Public Class LeadProgrammer

    Inherits Programmer Implements Head

    Private m_MoraleFund As Decimal

    Private m_MyTeam As Employee()

    Public Function Rate(ByVal aPerson As Employee) As String _

    Implements Head.Rate



    Содержание  Назад  Вперед