lang • new

NEW

Object = NEW Class [ ( Constructor parameters... ) ] [ AS Name ]

Instancia a classe Class.

Se for especificado um nome, o novo objeto será capaz de gerar eventos chamando um procedimento ou função pública em seu "pai".

  • Este pai, ou observador de eventos padrão, é o objeto ou classe em que o novo objeto é instanciado.

  • O nome deste manipulador de eventos é o nome do objeto seguido por um sublinhado e o nome do evento.

Se você esquecer de especificar a parte Name, seu objeto nunca vai gerar eventos!

NEW não é um operador. Você só pode usá-lo dentro de uma atribuição.

Mas você pode usar a função Object.New em seu lugar.

Instanciando Forms (gb.qt4)

A classe Form é, por padrão o seu próprio observador evento, usando o nome do evento Form. Isto que devemos escrever.dentro do arquivo de classe de um formulário para interceptar eventos do mesmo formulário.

Public Sub Form_Open()
  Print "I'm here"
End

Se você criar uma instância de um formulário usando a sintaxe New MyForm As Name, isso não vai mais acontecer. O formulário será ligado ao objecto actual, e especialmente (uma vez que cada objeto pode ter no máximo um observador evento padrão) ele não será ligado a si próprio.

Assim, o manipulador de eventos Form_Open () dentro do código do formulário não será mais chamado. Se você quiser várias classes para receber eventos de um único objeto, use a classe Observer.

Manipuladores de eventos comuns

Dois objetos diferentes podem ter o mesmo nome de evento. Assim, você pode gerenciar eventos de vários objetos no mesmo procedimento de evento, desde que esses objetos gerem os mesmos eventos.

Este recurso é utilizado pelo IDE para a implementação da propriedade Grupo.

Exemplos

hButton = NEW Button(ME) AS "MyButton"
...
PUBLIC PROCEDURE MyButton_Click()

  PRINT "My button was clicked !"

END
' Este exemplo cria 9 * 9 * 9 pequenas caixas de texto que podem ser acessados por meio do
' public Object[] array objIsImpossible

PUBLIC bIsInitialised AS Boolean
PUBLIC objIsImpossible AS Object[]

PUBLIC SUB Form_Open()

DIM iR AS Integer
DIM iR2 AS Integer
DIM iC AS Integer
DIM iC2 AS Integer
DIM iDigit AS Integer
DIM iX AS Integer
DIM objTextBox AS TextBox

IF NOT bIsInitialised THEN
  objIsImpossible = NEW Object[] ' Cria a matriz
  iX = 0
  FOR iR = 0 TO 8
    FOR iC = 0 TO 8
      FOR iDigit = 0 TO 8
        iR2 = iDigit MOD 3
        iC2 = iDigit / 3
        objTextBox = NEW TextBox(ME) ' cria o próximo dos 9 * 9 * 9 TextBoxes
        objTextBox.X = (iR * 3 + iR2) * 12 + 2
        objTextBox.y = (iC * 3 + iC2) * 12 + 2
        objTextBox.Width = 10
        objTextBox.Height = 10

        objIsImpossible.Add(objTextBox, iX)

        iX = iX + 1
      NEXT '  iDigit
    NEXT '    iC
  NEXT '      iR
ENDIF

END

Instancias dinâmicas

Object = NEW ( ClassName [ , Constructor parameters... ] ) [ AS Name ]

Essa segunda sintaxe permite que você especifique o nome da classe dinamicamente como uma string.

Exemplos

' This creates an 3x3 array of float.
DIM MyArray AS NEW Float[3, 3]
' E isso também
DIM MyArray AS Object
DIM MyClassName AS String
MyClassName = "Float[]"
MyArray = NEW (MyClassName, 3, 3)

Veja também