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

Вниз

Освобождение ресурса в finally   Найти похожие ветки 

 
Игорь Шевченко ©   (2008-04-24 16:41) [160]

ZENsan ©   (24.04.08 16:35) [157]

type TMyClass = class
 class procedure SomeProc;
end;

...
 TMyClass.SomeProc;

Этот код можно выполнить в D1,D2,D3,D4,D5,D6,D7, далее со всеми остановками до станции Можайск Смоленского направления.


 
ZENsan ©   (2008-04-24 16:42) [161]

Вложенные классы.. Ето всё новое после 7 делфи..


 
{RASkov} ©   (2008-04-24 16:42) [162]

> [159] ZENsan ©   (24.04.08 16:40)

И что? Вторая строка откомпилится во всех делфи...


 
{RASkov} ©   (2008-04-24 16:44) [163]

> [161] ZENsan ©   (24.04.08 16:42)
> Вложенные классы..

куда? :) в МММ?


 
ZENsan ©   (2008-04-24 16:45) [164]

type
 TOuterClass = class
 strict private
MyField: Integer;
 public
type
     TInnerClass = class
  public
       MyInnerField: Integer;
 procedure InnerProc;
     end;
     procedure OuterProc;
 end;


 
{RASkov} ©   (2008-04-24 16:45) [165]

> Вторая строка откомпилится во всех делфи...

имелось в виду эта:

> TMyClass.StatProc("Hello");


 
ZENsan ©   (2008-04-24 16:46) [166]

Вы просто на 2007 не работали я смотрю...


 
{RASkov} ©   (2008-04-24 16:46) [167]

> [164] ZENsan ©   (24.04.08 16:45)

Это что за вообще такое и к чему оно вообще здесь? :)


 
{RASkov} ©   (2008-04-24 16:47) [168]

> [166] ZENsan ©   (24.04.08 16:46)

не работали и что? :)
От этого классовые методы из предыдущих делфи не пропали.... поверь :)


 
Palladin ©   (2008-04-24 16:47) [169]


> {RASkov} ©   (24.04.08 16:46) [167]

он юлить начал, вот к тому это...


 
ZENsan ©   (2008-04-24 16:47) [170]

Ну про новшества since Delphi 7...


 
{RASkov} ©   (2008-04-24 16:49) [171]

> [169] Palladin ©   (24.04.08 16:47)

Уже давно начал...


 
Ega23 ©   (2008-04-24 16:50) [172]


> Ну про новшества since Delphi 7...


Вот чудак-человек. Ты сейчас пытаешься доказать то, что колесо было изобретено в 20 веке.


 
Восхищенный   (2008-04-24 16:51) [173]

> ZENsan ©   (24.04.08 16:17) [147]

> "class static methods have no Self parameter at all" - официальный источник.
> Это про Делфи 2007. Там нету вообще Селф.

Все правильно. Но новое здесь только слово static, а не class. Ты ошибся. Спутал теплое с мягким.

Классовые методы (class methods), как тебе уже устали говорить, в Delphi были всегда, начиная еще с D1. Они действительно могут быть вызваны без создания экземпляра класса - и это тоже было всегда. Параметр Self в них есть, но, в отличие от обычных методов, указывает он именно на класс, а не на экземпляр класса - и это тоже было всегда.

Новое здесь по сравнению с D7 (и всеми предыдущими) - слово static. Оно означает, что метод может быть вызван из типа класса. Читай описание внимательно, там же все сказано:

"Classes can have static class methods -- i.e. methods that can be called from a class type. Class static methods can be accessed without an object reference. Unlike ordinary class methods, class static methods have no Self parameter at all. They also cannot access any instance members. (They still have access to class fields, class properties, and class methods.) Also unlike class methods, class static methods cannot be declared virtual".

Обрати внимание на выделенные слова "Unlike ordinary class methods" и "unlike class methods". Об отличиях от чего здесь говорится, по-твоему? Об отличиях от каких других классовых методов?

Вот от тех самых, которые существовали всегда, но только не были static. А ты почему-то решил, что их вообще никогда не было.

А они были. Всегда. Ты просто этого не знал. Но почему-то решил, что можешь спорить с людьми, которые знают и понимают гораздо больше тебя. И напорол чуши.

Подумай. И не ламерствуй более.


 
{RASkov} ©   (2008-04-24 16:57) [174]

А мне сразу JEDI не понравилась... жаль что RX к ним перешла :(
:о)

> ZENsan ©

если что, это у меня шутки такие) Хотя в данном случае - не совсем шутка.


 
Игорь Шевченко ©   (2008-04-24 17:00) [175]


> А мне сразу JEDI не понравилась


А причем тут Jedi ?


 
Ega23 ©   (2008-04-24 17:02) [176]


> А причем тут Jedi ?


http://delphimaster.net/view/15-1208941969/
[15]


 
ZENsan ©   (2008-04-24 17:03) [177]

Ща переварю..


 
{RASkov} ©   (2008-04-24 17:06) [178]

> А причем тут Jedi ?

Не повезло ей
:о)


 
Игорь Шевченко ©   (2008-04-24 17:07) [179]

Ega23 ©   (24.04.08 17:02) [176]

"Ну так и вы говорите - в чем проблема" (с) известный анекдот про соседа


 
{RASkov} ©   (2008-04-24 17:15) [180]

> [175] Игорь Шевченко ©   (24.04.08 17:00)

Просто ZENsan уверяет, что он является разработчиком компонента(ов) в проекте JEDI... в [176] вместе со ссылкой есть номер поста.
Ну а мне почему-то издавна.... т.е. сразу как первый раз попробывал, не понравился данный монстр-проект.... а тут еще такое ...свалилось :)
Ничего личного.... считайте за шутку.


 
ZENsan ©   (2008-04-24 17:18) [181]

Удалено модератором
Примечание: Выражения выбираем, не в пивной


 
ZENsan ©   (2008-04-24 17:20) [182]

Я не прямой Jedi developer... не пугайтесь так.. просто с некоторыми разработчиками вместе ковырялись часто с некоторыми проблемами...


 
Ega23 ©   (2008-04-24 17:25) [183]


> Ну чё теперь с лохом со мной делать будем? ....


Оскопить, предать анафеме и торжественно сжечь на городской площади. :)


 
ZENsan ©   (2008-04-24 17:25) [184]

Простите мастера за упрямость... блин ну так жестоко лохануться...

Всё иду вешаться....


 
ZENsan ©   (2008-04-24 17:27) [185]

Иду торжественно вешаться...

Так облили из-за этого промаха... вот так ло....


 
sniknik ©   (2008-04-24 17:30) [186]

не изза промаха, а изза гонора... общался бы нормально без апломба и наездов давно бы уж все разъяснили бы.

опять путаешь теплое с мягким.


 
{RASkov} ©   (2008-04-24 17:31) [187]

> [185] ZENsan ©   (24.04.08 17:27)

Да ладно тебе.... с кем не бывает...
Не горячись) Просто не нужно быть таким настырным, особенно когда многие говорят одно а ты с ними споришь...
Одно дело о вкусах спор, но здесь..... тут или так или не так.


 
ZENsan ©   (2008-04-24 17:34) [188]

Согласен. Стыдно даже... Извините пожалуйста... В селдующий раз точно буду внимателней...

Ещё раз извините.


 
Восхищенный   (2008-04-24 17:38) [189]

> ZENsan ©   (24.04.08 17:18) [181]

Хочешь совет, за который ты потом сто раз "спасибо" скажешь (если ему последуешь, конечно)?

Отложи на время разработку компонентов. Рано тебе еще. Без обид. Почитал я тут твои сообщения (не только в этой ветке, в других тоже) - и говорю тебе - рано. Не знаешь ты еще объектной модели Delphi и не понимаешь ее на том уровне, чтобы хорошие компоненты писать. А плохие - кому они нужны? Их только ленивый не писал, плохих-то, ими пол-инета завалено. Только мусор все это.

Поэтому - отложи на время разработку компонентов. А вместо этого потрать время на то, чтобы найти, скачать и капитально проштудировать книгу Рэя Конопки по разработке компонентов.

В сети она точно есть. И не смотри, что она старая - она не устарела. Все, что в ней написано, работает до сих пор. Много нового появилось - это да, но и старое никуда не исчезло, все осталось. И пока это старое наизусть не освоишь - о разработке приличных компонентов можно даже и не мечтать. Не получится.

Вот поверь. Может, оно и кажется обидным, но потом благодарить будешь. Этих самых компонентов я написал штук сто (а может и больше), очень разных, и простых, и сложных, и визуальных, и невизуальных, и для работы с данными, и всяких прочих - и все написаны профессионально, можешь поверить. Поэтому и говорю тебе - рано. Тебе сейчас не писать, а читать надо. И лучшей книги по этой теме, чем Конопка ты на русском не найдешь. Ее нет просто. Есть еще две другие книжки, но они послабее будут.

Вот такой совет.


 
ZENsan ©   (2008-04-24 17:44) [190]

Спасибо Восхищённый. Я и не говорил что я прям разрабатываю компоненты - лишь ингода учавствую в этом. А книжку поищю. Обид никаких. Я не силён сам в разработке компонентов, только чуток. Больше уделял время другому, поэтому и не знаю так глубоко объектную модель Делфи. Знал только то что использовал..наследования там всё такое.. А вот ети нюансы.. Буду читать, учится.. пригодится.

Спасибо, Восхищенный - даёшь дельные советы а не добиваешь в итак хреновой моральной обстановке..


 
ZENsan ©   (2008-04-24 17:45) [191]

А книгу уже стянул, приступлю скоро..


 
Palladin ©   (2008-04-24 17:50) [192]

чет я про ANB забыл :)


> ANB   (24.04.08 14:31) [96]

я считаю эту процедуру/метод уже жирной, все verb"ы разбиваются на логические куски, и решается это примерно так.

Type
TTextProceedManager=Class
 Private
  m_fileInText:TextFile;
  m_theLogStm:TFileStream;
  m_theErrStm:TFileStream;
  m_theSelQuery:TADOQuery;
  m_theExecQuery:TADOQuery;
 Public
  Constructor Create(Const p_strSrcFileName,p_strLogFileName,p_strErrFileName,p_strConnectionString:String) ;
  Destructor Destroy; Override;

  Procedure LogWriteLn(s:String);
  Function ReadLn:String;
  Procedure SaveErrorLine(s:String);
  Procedure Select(Const p_strSQL:String);
  Procedure Execute(Const p_strSQL:String);

  Property DataSourceQuery:TADOQuery Read m_theSelQuery;
End;

Constructor TTextProceedManager.Create;
Begin
If Not FileExists(p_strSrcFileName) Then Raise Exception(Format("File %s not found",[p_strSrcFileName]));

AssignFile(m_fileInText,p_strSrcFileName); Reset(m_fileInText);

m_theLogStm:=TFileStream.Create(p_strLogFileName,fmCreate);
m_theErrStm:=TFileStream.Create(p_strLogFileName,fmCreate);

m_theSelQuery:=TADOQuery.Create(Nil);
m_theSelQuery.ConnectionString:=p_strConnectionString;

m_theExecQuery:=TADOQuery.Create(Nil);
m_theExecQuery.ConnectionString:=p_strConnectionString;
End;

Destructor TTextProceedManager.Destroy;
Begin
CloseFile(m_fileInText);
m_theLogStm.Free;
m_theErrStm.Free;
m_theSelQuery.Free;
m_theExecQuery.Free;
End;

Procedure TTextProceedManager.LogWriteLn;
Begin
s:=s+#13#10;
m_theLogStm.Write(s[1],Length(s));
End;

Procedure TTextProceedManager.SaveErrorLine;
Begin
s:=s+#13#10;
m_theErrStm.Write(s[1],Length(s));
End;

Procedure TTextProceedManager.Select;
Begin
m_theSelQuery.Close;
m_theSelQuery.SQL.Text:=p_strSQL;
m_theSelQuery.Open;
End;

Procedure TTextProceedManager.Execute;
Begin
m_theExecQuery.SQL.Text:=p_strSQL;
m_theExecQuery.ExecSQL;
End;

Function TTextProceedManager.ReadLn;
Begin
System.ReadLn(m_fileInText,Result);
End;


и с наслаждением используем без всяких каскадов из try finally


Var
TPM:TTextProceedManager;
...
TPM:=TTextProceedManager.Create;
Try
Finally
TPM.Free;
End;


 
sniknik ©   (2008-04-24 18:13) [193]

<> CODE>m_theSelQuery:=TADOQuery.Create(Nil);
> m_theSelQuery.ConnectionString:=p_strConnectionString;

> m_theExecQuery:=TADOQuery.Create(Nil);
> m_theExecQuery.ConnectionString:=p_strConnectionString;

ай, нехорошо... чревато глюками (2 коннекта, одним сделал изменения, другим тут же прочитал, а данные то старые... не синхронизированные).


 
Palladin ©   (2008-04-24 18:16) [194]


> sniknik ©   (24.04.08 18:13) [193]

аааа.... ты придешь... я знал... я знал.... :) в общем тонкости реализации работы с БД в этом псевдопримере лучше доверить Николаю :) схема понятна...


 
ANB   (2008-04-25 09:51) [195]


> Palladin ©   (24.04.08 17:50) [192]

Хай. Снимаю свой наезд по поводу разработки сложных программ. Ты их реально пишешь. :)
Значится по коду замечания :
1) Все что здесь уже написано - это заменяет всего строк 10 в одной процедуре. Сильно проще не стало.
2) Про коннекты - отдельная песня, но т.к. я работаю с ораклом и не через АДО - это тут по барабану. В одаке тяжелее так лопухнутся, т.к. компоненты не умеют сами по себе коннектится.
3) Более серьезное замечание : селекты и инсерты надо запихать ДО цикла и препарировать. Чтобы уже в итерации тока параметры подсовывать. Потому я под кажный ДМЛ и отвел отдельный объект.
4) А теперь самое главное - чем отличается принципиально твой подход от моего с одним файнелли ? Ну разве что тем, что ты пользуешь поля класса, а я - локальные переменные, посему мне надо их нилить, а за тебя это неявно конструктор сделает.


 
ANB   (2008-04-25 09:53) [196]

Да. По п.2. В принципе ИНОГДА имеет смысл открыть и несколько сессий для ускорения.


 
Восхищенный   (2008-04-25 09:55) [197]

> ANB   (25.04.08 09:51) [195]

> 4) А теперь самое главное - чем отличается принципиально
> твой подход от моего с одним файнелли?

Структурированностью и обозримостью. Из которых вытекают более простые модификация, расширение и поддержка. Они и есть - принципиально.


 
Ega23 ©   (2008-04-25 10:09) [198]


> 4) А теперь самое главное - чем отличается принципиально
> твой подход от моего с одним файнелли ? Ну разве что тем,
>  что ты пользуешь поля класса, а я - локальные переменные,
>  посему мне надо их нилить, а за тебя это неявно конструктор
> сделает.
>


Дык и всю программу можно без процедур и функций писать. С глобальными переменными и goto. И будет работать. И может быть даже не хуже.
Вот только нечитабельно будет.


 
Игорь Шевченко ©   (2008-04-25 10:16) [199]


> Вот только нечитабельно будет.


Тоже не факт. Иные напишут с десяток классов в иерархии - вааще не прочитаешь, не то, что изменения какие вносить


 
Восхищенный   (2008-04-25 10:28) [200]

> Игорь Шевченко ©   (25.04.08 10:16) [199]

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



Страницы: 1 2 3 4 5 6 7 8 9 
10 11 12 13 14 15 16 17 вся ветка

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

Наверх





Память: 0.82 MB
Время: 0.137 c
15-1209368468
xayam
2008-04-28 11:41
2008.06.08
Удаленная установка


15-1209521827
Slider007
2008-04-30 06:17
2008.06.08
С днем рождения ! 30 апреля 2008 среда


15-1208872237
No_Dead
2008-04-22 17:50
2008.06.08
Дипломный проект и авторские права


2-1210865826
DFT
2008-05-15 19:37
2008.06.08
многомерность


15-1209015532
oxffff
2008-04-24 09:38
2008.06.08
УРА!!!!!!!!!!!!!!!!!!! Delphi RoadMap





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