Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.02.10;
Скачать: [xml.tar.bz2];

Вниз

Видимость функций   Найти похожие ветки 

 
REA   (2003-01-30 17:18) [0]

Хочу сделать функцию видимую только для своих классов (чтобы пользователь ее не вызывал когда ему в голову придет), но классы в разных модулях (логически разделил). Как бы это реализовать?


 
Digitman   (2003-01-30 17:20) [1]

а как это "пользователь" может умудриться вывзвать ф-цию, если ты не предоставляешь ему для этого никакого интерфейса ?)


 
Digitman   (2003-01-30 17:23) [2]

и кого ты вообще подразумеваешь под словом "пользователь" ?


 
REA   (2003-01-30 17:28) [3]

Ну да, точно. Я компонент пишу. Пользователи - остальные программисты. Интерфейс то у них будет и даже ссылочки на объекты, но вот в Private секцию функцию не перенести - не вызвать самому.


 
han_malign   (2003-01-30 17:29) [4]

unit Unit1;
interface
type TClass1 = class
protected
procedure Method1;
end;
.....................
unit Unit2;
interface
uses Unit1;
type
TProtectedClass1 = class(TClass1)
protected
end;//Именно такое объявление - ничего не пропущено

TClass2 = class
private
pRef: TClass1;
protected
procedure Method2;
public
constructor Create(aRef : TClass1);
property Ref: TClass1 read pRef;
end;
implementation
constructor TClass2.Create(aRef : TClass1);
begin
pRef:=aRef;
end;
procedure TClass2.Method2;
begin
TProtectedClass1(pRef).Method1;
end;
end.
.....................

- конечно довольно кривой метод создания дружественных классов, но за неимением лучшего...


 
han_malign   (2003-01-30 17:31) [5]

а вот с приватом - пожалуй туго...


 
REA   (2003-01-30 17:40) [6]

Хм. Спасибо, но так и самому нетрудно запутаться. Лучше уж все в один модуль скину или хотя бы базовый класс.


 
Бурундук   (2003-01-30 17:41) [7]

han_malign © (30.01.03 17:29)
>//Именно такое объявление - ничего не пропущено

Ну, во первых, сойдёт и так
TProtectedClass1 = class(TClass1);

А во вторых, этот довольно известный трюк позволяет получить доступ к защищённым функциям кому угодно, в том числе и
и тем самым пользователям.


 
han_malign   (2003-01-30 17:44) [8]

это я вкурсе, но сливать несколько модулей по 1500 - 3000 строк в один...


 
gsu   (2003-01-30 17:49) [9]

>> REA ©
Поставь код на фунцию, типа если код правильный, то она работает (-:|~


 
REA   (2003-01-30 17:56) [10]

Они и так по 1500 получатся...



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.02.10;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.008 c
1-28700
kofman
2003-01-31 12:21
2003.02.10
Чем отличается Halt от Application.Terminate ?


7-29135
Konstantin
2002-12-07 15:10
2003.02.10
как получить уникальное исмя файла


14-29028
Anatoly Podgoretsky
2003-01-23 07:51
2003.02.10
Именинники 23 января


3-28649
ruslanyd
2003-01-23 00:01
2003.02.10
Генераторы в Interbase


7-29120
Safonov
2002-12-05 16:41
2003.02.10
программирование Com порта на asm е





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский