Pergunta

Como eu poderia implementar Segurança do Tipo Enumerações em Delphi COM cenário ?Basicamente, eu gostaria de substituir um conjunto de primitivas constantes de enumeração de um conjunto de static final referências de objeto encapsulado em uma classe ?.Em Java, podemos fazer algo como:

public final class Enum
{
    public static final Enum ENUMITEM1 = new Enum ();
    public static final Enum ENUMITEM2 = new Enum ();
    //...
    private Enum () {}
} 

e fazer comparações usando o personalizado tipo de enumeração:

if (anObject != Enum.ENUMITEM1) ...

Atualmente estou usando o velho Delphi 5 e eu gostaria de declarar algumas enums parâmetros de interfaces, não permitindo que o cliente objetos para passar inteiros (ou longa) tipos no lugar do tipo de enumeração.Você tem uma melhor forma de implementar as enumerações diferente usando os nativos do delphi enums ?

Foi útil?

Solução

Agora que você já nos forneceu mais algumas pistas sobre a natureza da sua pergunta, a saber, mencionando COM, eu acho que eu entendo o que você quer dizer.COM pode empacotar apenas um subconjunto dos tipos de Delphi sabe entre um servidor COM o cliente.Você pode definir as enumerações em TLB editor, mas todos esses são do tipo TOleEnum que, basicamente, é um tipo de número inteiro (LongWord).Você pode ter uma variável do tipo TOleEnum qualquer valor inteiro que você quer e atribuir valores de diferentes tipos de enum para o outro.Não é realmente o tipo de seguro.

Eu não posso pensar em uma razão para Delphi COM não pode usar o tipo de seguro enums em vez, mas ele não.Eu tenho medo de nada, muito pode ser feito sobre isso.Talvez as alterações na TLB editor no próximo Delphi 2009 versão pode mudar isso.

Para o registro:Quando o TLB editor não é usado, o Delphi é perfeitamente capaz de ter interface com métodos que têm o tipo de segurança enumerações como parâmetros.

Outras dicas

Nativos do Delphi enumerações já estão de segurança do tipo.Java enumerações foram uma inovação para essa língua, porque antes de ele não ter enumerações em tudo.No entanto, talvez você quer dizer um recurso diferente de enumeração de valores prefixados por seu tipo e nome.

Próximo Delphi 2009, e a última versão do Delphi for .NET produto, suporte a uma nova directiva chamado escopo de enumerações.Ele se parece com isso:

{$APPTYPE CONSOLE}
{$SCOPEDENUMS ON}
type
  TFoo = (One, Two, Three);
{$SCOPEDENUMS OFF}

var
  x: TFoo;
begin
  x := TFoo.One;
  if not (x in [TFoo.Two, TFoo.Three]) then
    Writeln('OK');
end.

O que há de errado com nativos do Delphi enums?Eles são o tipo de seguro.

type
  TMyEnum = (Item1, Item2, Item3);

if MyEnum <> Item1 then...

Desde o Delphi 2005, você pode ter consts em uma classe, mas Delphi 5, não pode.

type
  TMyEnum = sealed class
  public
    const Item1 = 0;
    const Item2 = 1;
    const Item3 = 2;
  end;

Eu acho que eu sei porque Borland optar por não utilizar com segurança de tipos enums na TLB editor.Enums em de COM podem ser diferentes valores enquanto o Delphi desde a Delphi 6 (eu acho) pode fazer isso.

type
  TSomeEnum = (Enum1 = 1, Enum2 = 6, Enum3 = 80);  // Only since Delphi 6
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top