Про наследование

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

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

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Про наследование

Сообщение Nord777 » 11.09.2005 (Вс) 20:31

Всем привет! Подскажите пожалуйста, как создать обьект, унаследованный от класса, в котором нет конструктора ( Sub New) ?
Например от класса System.Drawing.Image . У меня что то не получается, но ведь класс Bitmap производный от Image, значит я что то не так делаю?

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 12.09.2005 (Пн) 7:33

как это нет?!?!?!?!?

Protected Sub New()
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 12.09.2005 (Пн) 8:25

хм...Я в какой то книге читал, что у каждого класса обязательно должен быть конструктор (Хотя сам частенько упускаю эту деталь), вс равно при создании екземпляра класса я пишу New(Хотя в нем нет данной процедуры)

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 12.09.2005 (Пн) 11:14

конструктор по умолчанию есть у ЛЮБОГО класса. Он не может не быть. Если не определять конструктор ручками, то все члены класса будут инициализироваться значениями по умолчанию (нули, Nothing и так далее...)
Весь мир матрица, а мы в нем потоки байтов!

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 12.09.2005 (Пн) 13:11

Да нет же! Я прекрасно понимаю что конструктор существует. Только он недоступен. Вопрос то был не в этом. Я хочу унаследовать от класса Image, вот пример:

Код: Выделить всё
Public Class Class2
    Inherits System.Drawing.Image

    Public Sub New()
        MyBase.New()
    End Sub
   
End Class


А вот ошибка, которую выкидывает студия: 'Overload resolution failed because no 'New' accessible

В чем заключается моя ошибка?

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 12.09.2005 (Пн) 13:56

Странно, это только в 2003, в 2005 он есть((((

Давайте думать как обойти...

-ЧТо требуется сделать?
-Почему требование унаследоваться?
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 12.09.2005 (Пн) 16:59

Что требуется сделать?

Я хочу расширить возможности класса Image. Дело в том, что сам Image не предоставляет методов для манипулирования отдельными пикселами, но зато их предоставляет класс Bitmap, который является наследником Image. Скорость работы этих методов (setpixel() и getpixel() ) мягко говоря - никакая. Вот я и решил это безобразие исправить. Я сделал класс который предоставляет гораздо более быстрый доступ к отдельным пикселам изображения.
При ПОПИКСЕЛЬНОМ заполнении экрана ( PictureBox с размерами 800x600 ) скорость заполнения - около 24 fps (AMD ATHLON 1800+).
Это конечно далеко не DirectX, но уже и не убогий SetPixel()

Почему требование унаследоваться?

Для удобства. Например чтобы можно было писать так:
Код: Выделить всё
  PictureBox1.Image = mySpeedImage

а не так:
Код: Выделить всё
  PictureBox1.Image = mySpeedImagе.img


На самом деле это не настолько важно. Просто решил сделать чтобы было, но наткнувшись на грабли с наследованием - стало интересно: Возможно ли вообще унаследоваться от Image?
Я это пробовал и на 2003 и на 2005 студии - результат тот же.
У кого какие мысли?

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 12.09.2005 (Пн) 17:32

точняк!
+ бага
в 2005 Object Browser показывает что конструктор Protected, а при декомпиляции Friend !
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 12.09.2005 (Пн) 22:10

Мне кажется ты немного поторопился с выводами по поводу баги.
Конструктор класса Image действительно обьявлен как Friend, именно поэтому он и не виден в Object Browser. А тот, который виден и обьявлен как Protected, на самом деле является конструктором класса MarshalByRefObject из которого наследуется Image. В 2005 студии это хорошо видно по полю Summary в Object Brouser

Значит не видать мне Image как своих ушей :cry:
Интересно, а можно ли внедриться в пространство имен System.Drawing? Тогда бы можно было без проблем унаследоваться.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 12.09.2005 (Пн) 22:20

Можно, конечно, динамически, но это ВЫСШИЙ пилотаж...
Так что тупо упаковывай имагу(((
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 12.09.2005 (Пн) 22:22

Хотя попробуй перехватить обращение к методу, но эт тоже глубокий рефлекшн(((

тут почитай, мож поможет...
http://blogs.gotdotnet.ru/personal/tk/P ... 5a9e326e99
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.09.2005 (Пн) 23:26

Nord777 писал(а):
Что требуется сделать?

Я хочу расширить возможности класса Image. Дело в том, что сам Image не предоставляет методов для манипулирования отдельными пикселами, но зато их предоставляет класс Bitmap, который является наследником Image.

Ну и почему бы не унаследоваться от Bitmap, раз у него конструктор открытый? :-?
Изображение

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 12.09.2005 (Пн) 23:30

tyomitch писал(а):
Nord777 писал(а):
Что требуется сделать?

Я хочу расширить возможности класса Image. Дело в том, что сам Image не предоставляет методов для манипулирования отдельными пикселами, но зато их предоставляет класс Bitmap, который является наследником Image.

Ну и почему бы не унаследоваться от Bitmap, раз у него конструктор открытый? :-?


NotInherits
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru


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

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

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

    TopList