Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Inherits

42K
16 сентября 2009 года
Александр H&H
13 / / 01.03.2009
Здравствуйте!
Вопрос такой. Имеется некий абстрактный класс 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)???

Код:
' исходный код классов

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



Код:
' управляющий модуль

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()
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог