' исходный код классов
Public MustInherit Class System_X
Private mName As String
Public Sub New(ByVal aName As String)
mName = aName
End Sub
Public ReadOnly Property Name() As String
Get
Return mName
End Get
End Property
Public MustOverride Property ID() As String
End Class
Public Class A
Inherits System_X
Private mmID As String
Public Sub New(ByVal aName As String, ByVal aID As String)
MyBase.New(aName)
mmID = aID
End Sub
Public Overrides Property ID() As String
Get
Return mmID
End Get
Set(ByVal value As String)
If Mid(value, 1, 1) = "A" And IsNumeric(Mid(value, 2, value.Length - 1)) = True Then
mmID = value
Else
Console.ForegroundColor = ConsoleColor.Red
Console.WriteLine("Неправильный формат для свойства ID, экземпляра от класса А")
Console.ForegroundColor = ConsoleColor.Gray
End If
End Set
End Property
End Class
Public Class B
Inherits A
'Private mmID As String ' создаем еще одно закрытое поля класса
Public Sub New(ByVal aName As String, ByVal aID As String)
MyBase.New(aName, aID)
'mmID = aID ' инициализируем его
End Sub
Public Overrides Property ID() As String
Get
'Return mmID ' понятно что происходит
Return MyBase.ID
End Get
Set(ByVal value As String)
If Mid(value, 1, 1) = "B" And IsNumeric(Mid(value, 2, value.Length - 1)) = True Then
MyBase.ID = value
'mmID = value ' понятно что происходит
Else
Console.ForegroundColor = ConsoleColor.Red
Console.WriteLine("Неправильный формат для свойства ID, экземпляра от класса B")
Console.ForegroundColor = ConsoleColor.Gray
End If
End Set
End Property
End Class
Inherits
Вопрос такой. Имеется некий абстрактный класс System_X, в котором есть свойство Name (только для чтения, типа String), и свойство которое должно быть перегружено в наследуемых классах ID(типа String).
Есть классы A и B, причем A наследует System_X, а B наследует A
(System_X
|_A
|_B)
В классе A уже реализуем свойство ID,причем при попытке установки значения этого свойства проверяем корректность устанавливаемого значения(Первый символ свойства должен быть имя класса, а последующие должны быть числом например: A132 или B4687946).
Свойство id в обоих классах одинаковое отличается только проверкой. При наследовании классом B класса A свойство полностью наследуеться и нет возможности его переделать(остается только написать его заново!!!!!!!).
есть идея написать проверку отдельно и каждый раз её вызывать при попытки установления свойства. Идея в следующем написать процедуру которая бы принимала имя вызывающего класса и само проверяемое значение, но при попытки установки свойства из дочернего класса оно обращается к родительскому и оттуда будет вызываться процедура проверки. как узнать из какого класса изначально была вызвана процедура(средствами vb.net)???
Код:
Код:
' управляющий модуль
Dim oA As New A("NameA", "A1")
Dim oB As New B("NameB", "B1")
WriteLine()
WriteLine("Введите новое значение свойства ID, экземпляра от класса A")
oA.ID = ReadLine()
WriteLine("Введите новое значение свойства ID, экземпляра от класса B")
oB.ID = ReadLine()
WriteLine()
WriteLine("Свойство ID объекта " & oA.Name & " равно " & oA.ID)
WriteLine("Свойство ID объекта " & oB.Name & " равно " & oB.ID)
ReadLine()
Dim oA As New A("NameA", "A1")
Dim oB As New B("NameB", "B1")
WriteLine()
WriteLine("Введите новое значение свойства ID, экземпляра от класса A")
oA.ID = ReadLine()
WriteLine("Введите новое значение свойства ID, экземпляра от класса B")
oB.ID = ReadLine()
WriteLine()
WriteLine("Свойство ID объекта " & oA.Name & " равно " & oA.ID)
WriteLine("Свойство ID объекта " & oB.Name & " равно " & oB.ID)
ReadLine()