Форум: "Начинающим";
Текущий архив: 2006.01.01;
Скачать: [xml.tar.bz2];
ВнизКонструкторы Найти похожие ветки
← →
dapher (2005-12-15 14:16) [0]Вопрос теоретического плана. Если назвать конструктор не словом Create а другим, что нить плохое произойдет? будет ли это вообще работать? если да, то как?
Спасибо.
← →
Digitman © (2005-12-15 14:20) [1]
> Если назвать конструктор не словом Create а другим, что
> нить плохое произойдет?
ничего плохого не произойдет
обзови его хоть валенком, лишь бы компилятор знал, что речь идет именно о конструирующем методе класса
> будет ли это вообще работать? если да, то как?
будет работать точно так же как любой иной конструктор с любым иным именем метода
← →
alex_*** © (2005-12-15 14:25) [2]а как сказать компилеру что метод ххх есть конструктор? по-моему конструтор в дельфи может только Create называться
← →
DesWind © (2005-12-15 14:30) [3]
> alex_*** © (15.12.05 14:25) [2]
Зарезервированое слово constructor
← →
Игорь Шевченко © (2005-12-15 14:38) [4]type
TBar = class
.....
public
constructor Foo;
end;
...
constructor TBar.Foo;
begin
inherited Create;
...
end;
var
Bar: TBar;
Bar := Bar.Foo;
← →
dapher (2005-12-15 14:45) [5]Понятно, спасибо...
А вот в каких случаях он вообще не нужен?
← →
TUser © (2005-12-15 14:48) [6]
> А вот в каких случаях он вообще не нужен?
Конструктор?
← →
dapher (2005-12-15 14:50) [7]да, именно он.. =)
← →
Digitman © (2005-12-15 14:52) [8]
> в каких случаях он вообще не нужен?
в тех случаях, когда в ходе конструирования объекта не требуется явная инициализация его данных
например,
TMyClass = class(..)
FSomeField: TSomeType;
..
constructor Valenok;
end;
constructor TMyClass.Valenok;
begin
...
FSomeField := SomeValue; //явная инициализация поля FSomeField
...
end;
← →
PVOzerski © (2005-12-15 14:56) [9]1) Если нет классов :). Например, если вместо классов используются объекты стиля Turbo Pascal, а все методы статические;
2) Если все методы в классе объявлены как class procedure или class function, полей нет вообще, а обращение к методам идет не через переменную типа "данный класс", а напрямую.
← →
Deka © (2005-12-15 15:15) [10]Насколько я помню, после создания все поля обнуляются и поэтому если такие нулевые значения устраивают - конструктор не нужен. Но это частный случай [8].
← →
dapher (2005-12-15 15:20) [11]вот если я создаю такой вот класс:
TMyClass = class
FSomeField1: TSomeType1;
FSomeField2: TSomeType2;
procedure SomeMethod;
end;
нужен конструктор? я так понимаю, что не нужен... или все-таки?
могу ли использовать вот так:
procedure SomeProc;
var
obj: TMyClass;
begin
obj.FSomeField1:=SomeValue;
obj.SomeMethod;
end;
← →
PVOzerski © (2005-12-15 15:21) [12]Осмелюсь напомнить, что переменная типа класс до присвоения ей чего-либо - nil или мусор. А присвоение бывает либо результата вызова конструктора, либо значения другой переменной (но тогда онабудет ссылаться на те же самые данные), либо это какие-то трюки, мало пригодные к рекомендованию.
← →
PVOzerski © (2005-12-15 15:25) [13]2dapher: так присваивать нельзя. Другое дело, что ты не обязан свой конструктор описывать. Всякий класс - по умолчанию наследник TObject, который имеет предопределенный метод Create. Если тебя он устраивает - вызывай его. Равно как у тебя уже есть деструктор Destroy и метод Free.
procedure SomeProc;
var
obj: TMyClass;
begin
obj := TMyClass.Create; //здесь вызовется конструктор, унаследованный от TObject
obj.FSomeField1:=SomeValue;
obj.SomeMethod;
obj.Free;
end;
← →
Джо © (2005-12-15 15:27) [14]Главное, деструктор Destroy"ем назвать.
← →
dapher (2005-12-15 15:31) [15]"Всякий класс - по умолчанию наследник TObject" - теперь все понятно! =) большое спасибо!
← →
PVOzerski © (2005-12-15 15:32) [16]2Джо: это важно, только если ты используешь стандартный Free. Тогда, кстати, Destroy еще и надо обязательно объявлять Override.
← →
Anatoly Podgoretsky © (2005-12-15 15:51) [17]Если класс является компонентом, помещаемым на палитру, то при этом автоматически будет вызываться конструктор с именем Create
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.01.01;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c