В D365/X++, почему '(' недопустимо, когда я использую «this», чтобы указать, что переменная существует в экземпляре?
У меня следующий класс:
public class MyDialogSelect extends RunBase
{
private DialogField nameField;
// Snipped for brevity
public Object dialog()
{
Dialog dialog = super();
nameField = dialog.addField(extendedTypeStr(CustName));
// Snipped for brevity
return dialog;
}
public void dialogSelectCtrl()
{
CustTable customerTable = CustTable::find(accountField.value());
nameField.value(customerTable.name());
// Snipped for brevity
}
}
Это компилируется и работает, как ожидалось.
Однако я предпочитаю использовать ключевое слово, чтобы указать, принадлежат ли переменные экземпляру, поэтому я пытаюсь изменить его на:
public class MyDialogSelect extends RunBase
{
private DialogField nameField;
// Snipped for brevity
public Object dialog()
{
Dialog dialog = super();
this.nameField = dialog.addField(extendedTypeStr(CustName));
// Snipped for brevity
return dialog;
}
public void dialogSelectCtrl()
{
CustTable customerTable = CustTable::find(accountField.value());
this.nameField.value(customerTable.name());
// Snipped for brevity
}
}
Но это не будет компилироваться, вместо этого приведет к
Invalid token '('.
. Однако, если я удалю раньше
nameField.value(customerTable.name());
, он снова работает, как ожидалось. (Примечание: я все еще указываю в
this.nameField = dialog.addField(extendedTypeStr(CustName));
).
Почему он не компилируется, если я добавляю перед свойством, вызывающим метод? Я также наблюдал это с
this.nameField.enabled(false)
также не удается. Есть ли более общее правило или принцип, который я должен здесь понять о том, когда x++ разрешает, запрещает или требует
this
?
2 ответа
Вы не можете использовать это для ссылки на переменные экземпляра в X++. Как в C++.
Вы можете (и должны) использовать это для ссылки на методы экземпляра.
Это относится к контексту разработки, в вашем примере это относится к классу в целом. Если вы добавляете другой метод, вы вызываете этот метод, используя this.
В связи с последними изменениями шаблона формы я считаю, что MSFT рекомендует использовать шаблон диалоговой формы вместо класса для создания диалогового окна.