Зачем вообще объявлять участников публичными, а не опубликованными?

Объявление участников как published имеет преимущества перед public:

Так есть ли когда-нибудь преимущество в объявлении участников public вместо published? Есть ли у published минусы? Или мне, как правило, следует всегда объявлять участников published?


PS: Не дубликат; Я прочитал этот вопрос и все ответы на него перед тем, как опубликовать свой вопрос. Вопрос о «возможном дублировании» объясняет разницу между двумя ключевыми словами, но не дает указаний, когда их следует использовать, а также о преимуществах / недостатках использования того и другого.


person DBedrenko    schedule 19.08.2015    source источник
comment
Я бы сказал, вам следует сделать наоборот. Объявляйте их как public и publish только тогда, когда это необходимо (не всегда вы хотите иметь свойство в OI, и не всегда вы используете старый тип RTTI).   -  person TLama    schedule 19.08.2015
comment
@TLama Почему бы вам не захотеть это в Obj Inspector? Его видимость является общедоступной, она находится в API, существует некий контракт с внешним миром, так почему бы вам не отображать все видимые элементы в инспекторе?   -  person DBedrenko    schedule 19.08.2015
comment
Потому что есть свойства, которые предназначены только для времени выполнения, например, Handle, Parent, MouseInClient и подобные. Не все имеет смысл быть в OI. Вот почему я бы подумал о том, чтобы думать наоборот.   -  person TLama    schedule 19.08.2015
comment
comment
@SamM: ISTM, что разница известна, но не обязательно последствия.   -  person Rudy Velthuis    schedule 19.08.2015
comment
@SamM Я прочитал этот вопрос и все ответы на него, прежде чем опубликовать свой вопрос. Связанный вами вопрос объясняет разницу, но не обязательно дает указания, когда следует использовать либо преимущества / недостатки. Руди тоже прав.   -  person DBedrenko    schedule 19.08.2015


Ответы (1)


Объявление опубликованным требует затрат на хранение, потому что размер вашего исполняемого файла увеличен, чтобы содержать RTTI. Объявление общедоступным позволяет избежать этой стоимости. Маловероятно, что это когда-либо будет иметь значение, особенно с учетом огромного размера современных исполняемых файлов Delphi, содержащих огромное количество кода, который даже не выполняется.

Для компонентов, которые можно редактировать в Инспекторе объектов, разница между public и published более значительна. Как вы говорите, именно так компонент определяет, какие свойства отображаются в инспекторе объектов. Некоторые свойства должны быть там видны, другие - нет. Пользователь TLama дает прекрасные примеры свойств, которые должны быть общедоступными, но не должны редактироваться в Инспекторе объектов: Parent, Handle и так далее.

Кроме того, все сводится к мнению. Вам решать, что делать.

person David Heffernan    schedule 19.08.2015