![]() |
|
Delphi class abstract (версия Delphi XE7) | ☑ | ||
---|---|---|---|---|
0
Ненавижу 1С
гуру
12.11.14
✎
08:36
|
Описываю класс как абстрактный
type MDObject=class abstract end; однако его экземпляры все равно можно создавать var x:MDObject; begin x:=MDObject.Create; x.Free; end вопрос, а в чем тогда смысл этой инструкции? |
|||
1
Serginio1
12.11.14
✎
10:39
|
А варнинги при компиляции есть?
|
|||
2
vde69
12.11.14
✎
10:45
|
на сколько помню, это именно для того и сделано, что-бы не выдавало ошибку....
абстрактный класс служит некой "болванкой" для шилдов. В твоем примере MDObject = TObject |
|||
3
Кирпич
12.11.14
✎
10:45
|
а почему мы решили что создавать экземпляры абстрактных классов запрещено?
|
|||
4
Looser-1c
12.11.14
✎
10:46
|
(3) По определению абстрактного класса....
|
|||
5
Кирпич
12.11.14
✎
10:46
|
по идее, должно ругаться при обращении к абстрактному методу. добавь в класс метод. может заругается.
|
|||
6
18_plus
12.11.14
✎
10:48
|
гуглозабаненные все
"В одних языках создавать экземпляры абстрактных классов запрещено, в других это допускается (например, ObjectPascal(Delphi)), но обращение к абстрактному методу объекта этого класса в процессе выполнения программы приведёт к ошибке." |
|||
7
Кирпич
12.11.14
✎
10:48
|
(4) ну смотря кто их придумывал. в одних языках так, в других по другому.
|
|||
8
vde69
12.11.14
✎
10:50
|
пример использования
описываем абстракный класс TCustomMuClass со свойством P1 потом на его основании описываем 2 разных класса TMuClass1 и TMuClass2 в них переопределяем P1 каждый на свой... потом гдето (например в TList) хотим использовать поле заранее не зная какой класс, тогда там описываем items как объект TCustomMuClass а фактически помещаем туда то что надо из своих двух классов. То есть используем типизированый указатель на родителя.... |
|||
9
Кирпич
12.11.14
✎
10:52
|
(8) от у тебя в голове дым. я балдею. :)))
|
|||
10
Ненавижу 1С
гуру
12.11.14
✎
10:55
|
(8) тут и интерфейс можно
|
|||
11
Looser-1c
12.11.14
✎
10:56
|
(10) А в дельфи он есть?
|
|||
12
Кирпич
12.11.14
✎
10:58
|
(11) есть, но по уродски
|
|||
13
Кирпич
12.11.14
✎
10:59
|
+(12) мож правда уже переделали. они же каждые полгода новые версии шлёпают
|
|||
14
Ненавижу 1С
гуру
12.11.14
✎
11:07
|
нашел
Note: Delphi allows instantiating a class declared abstract, for backward compatibility, but this feature should not be used anymore ладно, хотя я не помню про такую директиву класса в ранних версиях, тогда такой вопрос: Как сделать так, чтобы нельзя было создать объект класса? |
|||
15
Кирпич
12.11.14
✎
11:09
|
(14) а зачем такой класс нужен?
|
|||
16
Ненавижу 1С
гуру
12.11.14
✎
11:10
|
(15) чтобы клиенты библиотеки не могли создать объект базового класса, а только разрешенные дочерние
|
|||
17
Кирпич
12.11.14
✎
11:11
|
(16) ну пускай создают. тебе жалко что ли.
|
|||
18
Кирпич
12.11.14
✎
11:11
|
создаст. посмотрит - не работает и больше не будет создавать.
|
|||
19
Ненавижу 1С
гуру
12.11.14
✎
11:13
|
(17) не логично
|
|||
20
Кирпич
12.11.14
✎
11:16
|
(19) вообще эта дурь годам к 30-35 должна пройти. так что лучше отложи пока решение этого важного вопроса.
|
|||
21
Ненавижу 1С
гуру
12.11.14
✎
11:17
|
(20) шарп такое умеет, плюсы тоже, а тут на тебе - нет
|
|||
22
Кирпич
12.11.14
✎
11:30
|
(21) ну так и пиши на C#, если это для тебя так важно. какой дебил будет создавать экземпляр абстрактного класса, если это не нужно в принципе?
Можно запретить садиться на горячую сковородку. Кому надо тот сядет, а большинству это в голову даже не придёт. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |