2015-11-02 2 views
0

Так вот в этом случае. У меня есть класс A и B. Класс A имеет элемент в нем, который класса BСостав и наследство в VB.Net

Public Class A 
    public _lstB as list (of B) 
    public sub new() 
     _lstB = B.Init() 
    end sub 
end Class 

Public Class B 
    public shared sub Init() as list (of B) 
     .... 
    end sub 
End Class 

Нет, что я хочу сделать, это создать производный класс для А и В (позволяет сказать, DA и DB). Я хотел бы, чтобы элемент B был заменен DB в DA. Это возможно?

Public Class DA 
    inherits A 
    public _lstDB as list (of DB) 

    public sub new() 
     mybase.new 
     _lstDB = DB.Init() 
    end sub 
end Class 

Public Class DB 
    inherits B 
    public shadows shared sub Init() as list (of DB) 
     .... 
    end sub 
End Class 

Я совершенно уверен, что это путь, потому что в вызове

mybase.new 

Весь список (из B) будет создаваться в базовом классе, что никогда не будет endup используется!

+0

Ваш код не показывает никаких выводов в DA и DB. –

+0

вы можете создать базовый класс, который имеет общие свойства и методы для A и DA, тогда оба могут наследовать от реализации B или DB по мере необходимости. Или создайте базовый генератор, чтобы указать B или DB как T – Plutonix

ответ

1

Вы всегда можете разместить любые элементы, которые вы хотите, в базовых классах и производных классах; вам ничего не мешает. Как вы хотите использовать эти классы, зависит от вас. Если вам нужна коллекция из B экземпляров в вашем классе A, то это хорошо, или если вам нужна коллекция DB классов в DA, это тоже хорошо.

Вы также можете кодировать его так, что, когда вы добавляете экземпляр DB к коллекции вы имеете в DA классе, можно добавить, что экземпляр базового класса (A) коллекции, которая в порядке, потому что DB черпает от B. Например, если у вас есть этот метод в A:

Public Overridable Sub AddNew(item As B) 
    _lstB.Add(item) 
End Sub 

и этот метод в DA:

Public Overrides Sub AddNew(item As B) 
    MyBase.AddNew(item) 
End Sub 

Тогда вы только когда-либо хранящий одну коллекцию, в базовом классе A.

Все зависит от того, как вы хотите использовать свой класс - каковы ваши конкретные потребности для вашего дизайна.

+0

'и этот метод в B:' вы имеете в виду в DA, ​​я думаю. Однако может быть, что OP хочет, чтобы убедиться, что в _lstB из DA все элементы * должны иметь тип DB, так что добавление B-not-DB в DA не будет разрешено? –

+0

@ A.S.H. - Хороший улов, спасибо. –

Смежные вопросы