Наследование

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Наследование

Сообщение drronnie » 16.11.2009 (Пн) 18:38

Сделал класс Class1, унаследовал от него Class2, создал библиотеку, подключил к проекту на vb6. В классе Class2 нет методов унаследованных от Class 1. Такая же проблема описывается тут. Это особенность? Это можно обойти?
Компиляция - перевод словесного поноса в машинный код.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Наследование

Сообщение MIT » 16.11.2009 (Пн) 19:14

Accepted solution писал(а):This doesn't look like inheritance any longer. Instead you implement methods (but then you don't, because you attempt to call the void definitions of the base classes).

I'm really learning here, so don't take anything for granted.

How to use inheritance in Visual Basic 2005 or in Visual Basic .NET
http://support.microsoft.com/kb/307222
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Наследование

Сообщение Денис » 17.11.2009 (Вт) 9:15

MIT писал(а):
Accepted solution писал(а):This doesn't look like inheritance any longer. Instead you implement methods (but then you don't, because you attempt to call the void definitions of the base classes).

I'm really learning here, so don't take anything for granted.

How to use inheritance in Visual Basic 2005 or in Visual Basic .NET
http://support.microsoft.com/kb/307222

И это правильно, потому что в .NET произвели разделение между классом и интерфейсом.
drronnie
ты унаследовал класс, но не унаследовал интерфейс. Вот унаследуй-ка.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Re: Наследование

Сообщение drronnie » 17.11.2009 (Вт) 11:51

Т.е. мне нужно создать интерфейс, от которого унаследовать Class1?
Компиляция - перевод словесного поноса в машинный код.

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Re: Наследование

Сообщение drronnie » 17.11.2009 (Вт) 12:18

Создал Интерфейс IClass
Унаследовал интерфейс IClass в классе Class1, унаследовал Class2 от Class1 - не работает, унаследовал интерфейс IClass в классе Class2 - то же самое.
Компиляция - перевод словесного поноса в машинный код.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Наследование

Сообщение Денис » 17.11.2009 (Вт) 13:34

надо интерфейсы объявлять. наследовать их не надо. объекты только реализуют к.-л. интерфейсы.
итого имеем:
    1. Создал класс 1
    2. Создал интерфейс1
    3. Объявил интерфейс1
    4. Объявил класс 1, реализующий интерфейс1
    5. Унаследовал {класс2, реализующий интерфейс1} от класса1
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Re: Наследование

Сообщение drronnie » 17.11.2009 (Вт) 14:08

Вот так?
Код: Выделить всё
Public Interface Interface1
    Function Text() As String
End Interface

<Microsoft.VisualBasic.ComClass()> Public Class Class1
    Implements Interface1
    Public Function Text() As String Implements Interface1.Text
        Return "some text"
    End Function
End Class

<Microsoft.VisualBasic.ComClass()> Public Class Class2
    Inherits Class1
End Class

Пишет предупреждение:
Классу "Class2" назначен Microsoft.VisualBasic.ComClassAttribute, однако "Class2" не имеет открытых членов, которые могут быть использованы через COM, поэтому COM-интерфейсы не созданы.
Компиляция - перевод словесного поноса в машинный код.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Наследование

Сообщение Денис » 17.11.2009 (Вт) 14:15

Например так. Как один из десятка вариантов.

Код: Выделить всё
Public Interface Interface1
    Function Text() As String
End Interface

<Microsoft.VisualBasic.ComClass()> Public Class Class1
    Implements Interface1
    Public Function Text() As String Implements Interface1.Text
        Return "some text"
    End Function
End Class

<Microsoft.VisualBasic.ComClass()> Public Class Class2
    Inherits Class1
    Implements Interface1

    Public Overloads Function Text() As String
        Return "someelse text"
    End Function
End Class
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Re: Наследование

Сообщение drronnie » 17.11.2009 (Вт) 14:31

Денис, мне не нужно перегружать функцию.
Я хочу, чтобы при вызове Text у Class2 вызывалась функция Text из базового класса Class1.
Можно объявить функцию Text в Class2, а в теле вызывать Text от MyBase, но это не удобно.
Компиляция - перевод словесного поноса в машинный код.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Наследование

Сообщение Денис » 17.11.2009 (Вт) 14:36

drronnie писал(а):но это не удобно.

Вообще, тут говорят, что я сегодня бред генерирую, так что извини, если что не так. Вот, смотри, разве неудобно.
Код: Выделить всё
Public Interface Interface1
    Function Text() As String
End Interface

<Microsoft.VisualBasic.ComClass()> Public Class Class1
    Implements Interface1
    Public Function Text() As String Implements Interface1.Text
        Return "some text"
    End Function
End Class

<Microsoft.VisualBasic.ComClass()> Public Class Class2
    Inherits Class1
    Implements Interface1

    Public Overloads Function Text() As String
        Return MyBase.Text
    End Function
End Class
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Re: Наследование

Сообщение drronnie » 17.11.2009 (Вт) 14:40

Ну в "хеллоу ворде" удобно, а если у меня от класса десяток других унаследовано, а потом в ходе разработки мне приспичит к функции Text в базовом классе аргумент приделать, придётся переписывать все остальные классы, а это чревато боком.
Кроме того, какой тогда смысл наследования?
И какой смысл интерфейса в этом коде. По-моему правильнее будет переопределить функцию Text в производном классе, т.е. написать так:
Код: Выделить всё
<Microsoft.VisualBasic.ComClass()> Public Class Class1
    Public Overridable Function Text() As String
        Return "some text"
    End Function
End Class

<Microsoft.VisualBasic.ComClass()> Public Class Class2
    Inherits Class1

    Public Overrides Function Text() As String
        Return MyBase.Text
    End Function
End Class
Компиляция - перевод словесного поноса в машинный код.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Наследование

Сообщение Денис » 17.11.2009 (Вт) 17:02

drronnie писал(а):По-моему правильнее будет переопределить функцию Text в производном классе

Вот и отлично. Пусть так остается. Про интерфейсы забудь. У меня сегодня был тяжелый день. Уфф.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Re: Наследование

Сообщение drronnie » 17.11.2009 (Вт) 17:43

Меня не устраивает такой подход.
Компиляция - перевод словесного поноса в машинный код.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26

    TopList