Visual Basic .NET Language
Ключевые слова ООП
Поиск…
Определение класса
Классы являются жизненно важными аспектами ООП. Класс похож на «план» объекта. Объект имеет свойства класса, но характеристики не определены внутри самого класса. Поскольку каждый объект может быть другим, они определяют свои собственные характеристики.
Public Class Person
End Class
Public Class Customer
End Class
Класс также может содержать подклассы . Подкласс наследует те же свойства и поведение, что и его родительский класс, но может иметь свои собственные уникальные свойства и классы.
Модификаторы наследования (по классам)
Inherits
Задает базовый (или родительский) класс
Public Class Person
End Class
Public Class Customer
Inherits Person
End Class
'One line notation
Public Class Student : Inherits Person
End Class
Возможные объекты:
Dim p As New Person
Dim c As New Customer
Dim s As New Student
NotInheritable
Запрещает программистам использовать класс в качестве базового класса.
Public NotInheritable Class Person
End Class
Возможные объекты:
Dim p As New Person
MustInherit
Указывает, что класс предназначен только для базового класса. (Аннотация класс)
Public MustInherit Class Person
End Class
Public Class Customer
Inherits Person
End Class
Возможные объекты:
Dim c As New Customer
Модификаторы наследования (по свойствам и методам)
Overridable
Позволяет переопределить свойство или метод в классе в производном классе.
Public Class Person
Public Overridable Sub DoSomething()
Console.WriteLine("Person")
End Sub
End Class
Переопределение
Переопределяет свойство или метод Overridable, определенный в базовом классе.
Public Class Customer
Inherits Person
'Base Class must be Overridable
Public Overrides Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
NotOverridable
Предотвращает переопределение свойства или метода в наследующем классе. Поведение по умолчанию. Может быть объявлен только при переопределении методов
Public Class Person
Public Overridable Sub DoSomething()
Console.WriteLine("Person")
End Sub
End Class
Public Class Customer
Inherits Person
Public NotOverridable Overrides Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
Public Class DetailedCustomer
Inherits Customer
'DoSomething can't be overridden
End Class
Пример использования:
Dim p As New Person
p.DoSomething()
Dim c As New Customer
c.DoSomething()
Dim d As New DetailedCustomer
d.DoSomething()
Выход:
Person
Customer
Customer
MustOverride
Требуется, чтобы производный класс переопределил свойство или метод.
Методы MustOverride должны быть объявлены в классах MustInherit.
Public MustInherit Class Person
Public MustOverride Sub DoSomething()
'No method definition here
End Class
Public Class Customer
Inherits Person
'DoSomething must be overridden
Public Overrides Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
Пример использования:
Dim c As New Customer
c.DoSomething()
Выход:
Customer
MyBase
Ключевое слово MyBase ведет себя как переменная объекта, относящаяся к базовому классу текущего экземпляра класса.
Public Class Person
Public Sub DoSomething()
Console.WriteLine("Person")
End Sub
End Class
Public Class Customer
Inherits Person
Public Sub DoSomethingElse()
MyBase.DoSomething()
End Sub
End Class
Пример использования:
Dim p As New Person
p.DoSomething()
Console.WriteLine("----")
Dim c As New Customer
c.DoSomething()
c.DoSomethingElse()
Выход:
Person
----
Person
Person
Me vs MyClass
Me использует экземпляр текущего объекта.
MyClass использует членное определение в классе, где вызван элемент
Class Person
Public Overridable Sub DoSomething()
Console.WriteLine("Person")
End Sub
Public Sub useMe()
Me.DoSomething()
End Sub
Public Sub useMyClass()
MyClass.DoSomething()
End Sub
End Class
Class Customer
Inherits Person
Public Overrides Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
Пример использования:
Dim c As New Customer
c.useMe()
c.useMyClass()
Выход:
Customer
Person
перегрузка
Перегрузка - это создание более чем одной процедуры, конструктора экземпляра или свойства в классе с тем же именем, но с разными типами аргументов.
Class Person
Overloads Sub Display(ByVal theChar As Char)
' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
' Add code that displays Integer data.
End Sub
Overloads Sub Display(ByVal theDouble As Double)
' Add code that displays Double data.
End Sub
End Class
Тени
Он переопределяет член, который не является переопределяемым. Будет затронуто только обращение к экземпляру. Код внутри базовых классов не будет зависеть от этого.
Public Class Person
Public Sub DoSomething()
Console.WriteLine("Person")
End Sub
Public Sub UseMe()
Me.DoSomething()
End Sub
End Class
Public Class Customer
Inherits Person
Public Shadows Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
Пример использования:
Dim p As New Person
Dim c As New Customer
p.UseMe()
c.UseMe()
Console.WriteLine("----")
p.DoSomething()
c.DoSomething()
Выход:
Person
Person
----
Person
Customer
Ловушки :
Пример 1. Создание нового объекта через общий. Какая функция будет использоваться?
Public Sub CreateAndDoSomething(Of T As {Person, New})()
Dim obj As New T
obj.DoSomething()
End Sub
пример использования:
Dim p As New Person
p.DoSomething()
Dim s As New Student
s.DoSomething()
Console.WriteLine("----")
CreateAndDoSomething(Of Person)()
CreateAndDoSomething(Of Student)()
Результат: по интуиции результат должен быть таким же. Но это не так.
Person
Student
----
Person
Person
Пример 2:
Dim p As Person
Dim s As New Student
p = s
p.DoSomething()
s.DoSomething()
Результат. По интуиции вы можете думать, что p и s равны и будут вести себя одинаково. Но это не так.
Person
Student
В этих простых примерах легко узнать странное поведение Shadows. Но в реальной жизни это приносит много сюрпризов. Целесообразно предотвратить использование теней. Следует использовать как можно больше другие альтернативы (переопределения и т. Д.)
Интерфейсы
Public Interface IPerson
Sub DoSomething()
End Interface
Public Class Customer
Implements IPerson
Public Sub DoSomething() Implements IPerson.DoSomething
Console.WriteLine("Customer")
End Sub
End Class