Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.11;
Скачать: CL | DM;

Вниз

Зачем Borland так делает???   Найти похожие ветки 

 
Ega23 ©   (2005-06-14 11:06) [0]


 TDataSet = class(TComponent, IProviderSupport)
 private
   ........
   FActiveRecord: Integer;
   ........
 
 end;

 TDataLink = class(TPersistent)
 private
   ........
   FDataSource: TDataSource;
   ........
   function GetDataSet: TDataSet;
   ........
   procedure UpdateRange;
   ........
 protected
   ........
 public
   ........
   property DataSet: TDataSet read GetDataSet;
   ........
 end;
 

function TDataLink.GetDataSet: TDataSet;
begin
 if DataSource <> nil then Result := DataSource.DataSet else Result := nil;
end;

procedure TDataLink.UpdateRange;
var
 Min, Max: Integer;
begin
 Min := DataSet.FActiveRecord - FBufferCount + 1;
 if Min < 0 then Min := 0;
 Max := DataSet.FBufferCount - FBufferCount;
 if Max < 0 then Max := 0;
 if Max > DataSet.FActiveRecord then Max := DataSet.FActiveRecord;
 if FFirstRecord < Min then FFirstRecord := Min;
 if FFirstRecord > Max then FFirstRecord := Max;
 if (FFirstRecord <> 0) and
    (DataSet.FActiveRecord - FFirstRecord < FBufferCount - 1) then
   Dec(FFirstRecord);
end;



?????????

Я конечно понимаю, что единицей инкапсуляции является юнит, а не класс, но всё-таки....


 
-=XP=- ©   (2005-06-14 11:16) [1]

В Delphi нет явного понятия "дружественные классы". "Дружественность" определяется на уровне модуля - все классы, объявленные в одном модуле являются "дружественными". Поэтому никто не запрещает делать так, как сделано в приведенном Вами примере.


 
Ega23 ©   (2005-06-14 11:19) [2]

2 -=XP=- ©   (14.06.05 11:16) [1]

Да я это знаю... Тут другое: я вот пытаюсь понять, каким образом DataLink реагирует на изменение данных в DataSet"е и где хранится буфер данных. Самое обидное, что я САМ такого сделать не смогу. Точнее, смогу только если:
1. Нарушу "генофонд" (в DB.pas пропишу собственный класс)
2. Унаследую класс от TDataSet в своём модуле.
Обидно...


 
TUser ©   (2005-06-14 11:54) [3]

> 1. Нарушу "генофонд" (в DB.pas пропишу собственный класс)

Т.е. вы хотите прописать свое значение в read-only свойство?
unit Unit1;

interface

type
TTest = class
 private
  FField: integer;
 public
  procedure SetInteger (Value: integer);
  property Field: integer read FField;
 end;

implementation

procedure TTest.SetInteger (Value: integer);
begin
 FField:=Value;
end;

end.

// =========================

unit Unit2;

interface
uses Unit1;

procedure SetField (T: TTest; Value: integer);

implementation

type
PInteger = ^integer;

procedure SetField (T: TTest; Value: integer);
var p: PInteger;
begin
 p:=@T.Field;
 p^:=Value;
end;

end.

// =============================

{$apptype console}
program Test;
uses Unit1, Unit2, SysUtils;

var T: TTest;
begin
 T:=TTest.Create;
 try
  T.SetInteger (10);
  SetField (T,20);
  writeln (inttostr(T.Field));
 finally
  T.Free;
 end;
end.


 
Ega23 ©   (2005-06-14 11:56) [4]

TUser ©   (14.06.05 11:54) [3]

Это public-property
Речь идёт о том, чтобы "достучаться" до private-полей.



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

Текущий архив: 2005.07.11;
Скачать: CL | DM;

Наверх




Память: 0.45 MB
Время: 0.054 c
3-1117548404
<Lelik>
2005-05-31 18:06
2005.07.11
как получить запись через ADO


4-1116142626
Керик
2005-05-15 11:37
2005.07.11
Работа с реестром из файла


10-1095085130
k_il
2004-09-13 18:18
2005.07.11
Версии интерфейсов


1-1118584107
Genie™
2005-06-12 17:48
2005.07.11
Как быстро получить список авторов списка файлов


4-1116069137
pavlov
2005-05-14 15:12
2005.07.11
Подключение девайсов к USB





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский