powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Обманка для свойства Name. Как бороться ?
14 сообщений из 14, страница 1 из 1
Обманка для свойства Name. Как бороться ?
    #38410396
thunder2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Захотел сделать класс отвечающий за работу с записью в таблице. Всё бы ничего, но столкнулся с такой проблемой - в таблице есть поле Name и ему должно соответствовать свойство Name в моём классе. Так вот, это свойство зарезервировано VFP для именование объектов и выполнение операторов типа
Код: sql
1.
MyClass.Name = "Тра-ля-ля"


или
Код: sql
1.
2.
3.
DEFINE CLASS MyClass as Custom
  Name=""
ENDDEFINE


немедленно вызывает исключение VFP, хотя есть куча примеров, в которых авторы запросто манипулируют этим свойством.
Сам-то я обошел это ограничение VFP добавив в определение класс защищенное свойство _name и два метода с суффиксами _ACCESS и _ASSIGN:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
DEFINE CLASS MyClass as Custom
  PROTECTED _Name

  PROCEDURE name_access(_name)
     RETURN this._name
  ENDPROC
  PROCEDURE name_assign(_name)
     this._name=m._name
  ENDPROC
ENDDEFINE


Но меня гложет сомнение - почему в примерах якобы манипуляции со свойство Name якобы работают, а у меня нет ?
Есть ли другое решение этой досадной заморочки ?
...
Рейтинг: 0 / 0
Обманка для свойства Name. Как бороться ?
    #38410417
Rostislav D. Kudryashov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
thunder2, а не было мысли попробовать класс Empty. Проще всего создать его объект командой SCATTER .. NAME ...
...
Рейтинг: 0 / 0
Обманка для свойства Name. Как бороться ?
    #38410421
Rostislav D. Kudryashov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
thunder2, правда, в классе Empty не предусмотрены методы, но ты можешь сделать объект Empty членогм класса с методами
...
Рейтинг: 0 / 0
Обманка для свойства Name. Как бороться ?
    #38410431
thunder2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rostislav D. Kudryashov,

Была такая мысль, но тоже получаю ошибку. Я так понял Name без оберток вообще нельзя использовать, но я могу ошибаться, потому и пришел сюда.
...
Рейтинг: 0 / 0
Обманка для свойства Name. Как бороться ?
    #38410437
Rostislav D. Kudryashov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
thunder2, это уже чудо. Как тебе это удалось? У меня VFP9 SP2 отрабатывает без запинки
o = NEWOBJECT ('EMPTY')
ADDPROPERTY(o,'Name','')
Хотя, SCATTER ... NAME ... в некоторых случаях предпочтительнее
...
Рейтинг: 0 / 0
Обманка для свойства Name. Как бороться ?
    #38410525
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело в том, что свойство Name используется как некий внутренний идентификатор объектов. В силу этого, на его содержимое налагаются некоторые ограничения, свойственные для идентификаторов

- Это свойство не может быть пустым
- Это свойство не может содержать спец.символы. Только буквы и цифры. Причем начинаться должно с буквы.
- Разные объекты на одном уровне вложенности формы не могут иметь одинаковое значение свойства Name

Собственно, все ограничения соответствуют ограничениям на имена переменных (идентификаторов). Имя переменной не может быть пустым, не может начинаться с цифры, содержать спец.символы и быть одинаковыми в рамках одной области видимости

Однако насколько я в курсе, к именам полей таблиц применяются точно такие же ограничения. Так что, особых проблем не вижу.

Код: sql
1.
2.
3.
4.
5.
oTest = CreateObject('Custom')
oTest.Name = 'test'
oTest.Name = 'MyTable'
oTest.Name = 'Таблица'
oTest.Name = 'Таблица123'


А вот если Вы попытаетесь присвоить имени пустое значение или добавите спец.символ (тире, точка, запятая и т.п.), то и получите ошибку или исключение.

Код: sql
1.
2.
3.
4.
oTest = CreateObject('Custom')
oTest.Name = ''           && Ошибка - недопустимое значение
oTest.Name = 'My-Table'   && Ошибка - недопустимое значение
oTest.Name = '1Таблица'   && Ошибка - недопустимое значение


Другими словами, использовать можно, но помня о том, что не все значения допустимо туда записывать.
...
Рейтинг: 0 / 0
Обманка для свойства Name. Как бороться ?
    #38410549
thunder2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ,

Ну, вообщем, как я и предполагал ограничения на значения свойства Name есть и похоже использование методов - единственный способ обойти эти ограничения.
...
Рейтинг: 0 / 0
Обманка для свойства Name. Как бороться ?
    #38410550
thunder2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rostislav D. Kudryashovthunder2, это уже чудо. Как тебе это удалось? У меня VFP9 SP2 отрабатывает без запинки
o = NEWOBJECT ('EMPTY')
ADDPROPERTY(o,'Name','')
Хотя, SCATTER ... NAME ... в некоторых случаях предпочтительнее
Я почему-то делал через DEFINE CLASS MyClass AS EMPTY, но ничего хорошего не получилось. Да и такой способ меня не устраивает - NEWOBJECT("EMPTY"), по сути, создает структуру, а мне требуется полноценный класс
...
Рейтинг: 0 / 0
Обманка для свойства Name. Как бороться ?
    #38410555
Rostislav D. Kudryashov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
thunder2, если тебе нужно то чего нет, у тебя не будет ничего.
Но человек более скромный мог бы ограничиться вложением объекта Empty в объект класса с методами. Это, кажется, называется делегированием обязанностей в высокоумной теории
...
Рейтинг: 0 / 0
Обманка для свойства Name. Как бороться ?
    #38410569
ЛДПР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не корысти ради :))

ВладимирМ- Разные объекты на одном уровне вложенности формы не могут иметь одинаковое значение свойства Name
Rostislav D. Kudryashovв классе Empty не предусмотрены методы

все конечно так, но это же Fox и это таки в нем возможно :)
...
Рейтинг: 0 / 0
Обманка для свойства Name. Как бороться ?
    #38410595
Rostislav D. Kudryashov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛДПР, а токмо ради святого и чистого Знания!
Как воткнуть методы в объект класса Empty? Чтоб вызывать их набором имени переменной объекта и через точку - именем метода: Obj.Method(). Т.е., традиционно, без извращений.
...
Рейтинг: 0 / 0
Обманка для свойства Name. Как бороться ?
    #38410648
ЛДПР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rostislav D. Kudryashov Чтоб вызывать ... без извращений.
Вызвать Да, при создании и редактировании придется поизвращаться :))

Пример объекта на основе класса Empty

Код: c#
1.
2.
3.
4.
5.
SET CLASSLIB TO _test.vcx ADDITIVE
loPattern     = CREATEOBJECT("pattern","Name=0;parent=[p]")
m.loPattern.AddProperty("_",9)
set step on
m.loPattern.Release()



И это еще далеко не все извращения которые можно сделать с Fox(ом) :))
...
Рейтинг: 0 / 0
Обманка для свойства Name. Как бороться ?
    #38410662
Rostislav D. Kudryashov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛДПР, пытаюсь расшифровать содержимое библиотек _test.vcx. Предполагаю, что ты туда каким-то манером запихнул класс с именем pattern с базовым типом Empty.
Не уверен, что все знают, как это сотворить. Я пока не догадался.
...
Рейтинг: 0 / 0
Обманка для свойства Name. Как бороться ?
    #38410667
Rostislav D. Kudryashov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛДПР, такой "уклончивый" ответ только усиливает интригу. И если есть охота её раскрыть, то лучше в той новой ветке, которую я открыл специально с этим вопросом "Как воткнуть метод в объект класса Empty"
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Обманка для свойства Name. Как бороться ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]