Versión gráfica del tutorial básico de Delphi del tipo de datos compuestos (enumeración)

Los tipos de datos complejos también se denominan tipos de datos compuestos, que son relativos a tipos de datos simples (o tipos de datos básicos). Prefiero llamarlo un tipo de datos compuestos, obviamente, en realidad es una combinación de uno o más tipos de datos básicos

Tipo enumerado

El programa Pascal no solo se usa para el procesamiento numérico, sino que también se usa más ampliamente para procesar datos no numéricos. Por ejemplo, sexo, mes, día de la semana, color, nombre de la unidad, antecedentes educativos, ocupación, etc.

definición

tipo de enumeración tipo identificador = (identificador 1, identificador 2, ..., identificador n)

Caracteristicas

Los elementos de enumeración solo pueden ser identificadores ; todos los elementos de enumeración enumerados al definir un tipo de enumeración constituyen el rango (rango de valores) de este tipo de enumeración. P.ej

Las siguientes definiciones de tipo son legales:

 type
  days=(sun,mon,tue,wed,thu,fri,sat);
  colors=(red,yellow,blue,white,black,green);

Y la siguiente definición de tipo es incorrecta:

  type
  colortype=('red','yellow','blue','white');
  numbers=(1,3,5,7,9);

Al principio, cuando usé la enumeración por primera vez, apliqué directamente el uso de la enumeración en Java. Obviamente estaba roto.

Los tipos de enumeración son tipos secuenciales: el número de secuencia de cada elemento de enumeración se determina de acuerdo con el orden de disposición de los elementos de enumeración cuando se define el tipo, y el número de secuencia comienza desde 0. P.ej

Defina el tipo days = (sun, mon, tue, wed, thu, vie, sat); luego, ord (sun) = 0, ord (mon) = 1, ..., y así sucesivamente.

El mismo elemento de enumeración no puede aparecer en dos o más definiciones de tipo de enumeración. La siguiente definición es incorrecta:

type 

color1=(red,yellow,white);  // 因为red属于枚举类型color1和 color2
  
color2=(blue,red,black);
  

Las variables de tipo enumeración solo pueden realizar operaciones de asignación y operaciones relacionales , pero no pueden realizar operaciones aritméticas y operaciones lógicas.Cuando se comparan elementos enumerados, en realidad es una comparación de sus números de serie. P.ej:


type
	days=(sun,mon,tue,wed,thu,fri,sat);
 colors=(red,yellow,blue,white,black,green);
var
	color:colors;
 weekday:days;
 //则下面语句是合法的:
 weekday:=mon;
 if weekday=sun then 
    write('rest');

 {而下面语句是不合法的:}
	mon:=1;           {错把枚举值当成变量名}
	weekday:=blue;   {枚举值blue不属于枚举变量weekday的值域}
	read(color);      {枚举类型变量 不能用读语句进行赋值}
	write(weekday);   {不能通过写语句输出枚举类型的变量值和枚举值。} 
  writeln(blue);

Puede fusionar la descripción de la variable con la definición de tipo . Este tipo de juego es muy común en Delphi, que equivale a fusionar los dos pasos originales en uno. P.ej:


var
  holiday,workday:(sun,mon,tue,wed,thu,fri,sat);
  color:(red,yellow,blue,white,black,green);

La entrada y salida de datos enumerados se puede realizar de forma indirecta. Al ingresar, generalmente puede ingresar un código y convertirlo a través del programa. Al generar, solo imprime la cadena de caracteres correspondiente al elemento enumerado. Esto se utilizará en las siguientes preguntas de muestra.

Obtener elemento de enumeración

Adquisición de valor único, si bien esta situación es relativamente rara, no significa que no se pueda adquirir, yo mismo no sabía cómo adquirir la clave y el valor en la enumeración hace mucho tiempo.

implementation

//该单元必须引入
uses System.TypInfo;
{$R *.dfm}

type
  TColors = (Red, Green, Blue);

procedure TForm1.Button1Click(Sender: TObject);
var
  Colors: TColor;
  Info: PTypeInfo;
  EnumName: string;
  EnumValue: Integer;
begin
  Info := TypeInfo(TColors);
  //获取value对应的名称
  EnumName := GetEnumName(Info, 1);
  //获取名称对应的value
  EnumValue := GetEnumValue(Info, EnumName);

  ShowMessage(EnumName + ',' + EnumValue.ToString);
end;

Atraviese los valores de la enumeración: el tipo de enumeración es un tipo ordenado, por lo que las variables del tipo de enumeración se pueden utilizar como variables de bucle.



uses System.TypInfo;
{$R *.dfm}

type
  TColors = (Red, Green, Blue);

procedure TForm1.Button1Click(Sender: TObject);
var
  Colors: TColors;
  Info: PTypeInfo;
  EnumPoint: PTypeData;

  EnumName: string;
  EnumValue: Integer;
begin
  Info := TypeInfo(TColors);
  //获取PTypeInfo的指针对象
  EnumPoint := GetTypeData(Info);
  //利用TypeData中的MinValue和MaxValue函数实现遍历
  for var I := EnumPoint.MinValue to EnumPoint.MaxValue do begin
    EnumName := GetEnumName(Info, I);

    EnumValue := GetEnumValue(Info, EnumName);

    ShowMessage(EnumName + ',' + EnumValue.ToString);
  end;

end;

Aplicaciones

Ejemplo: Determine cuál es el color actual.


implementation

uses System.TypInfo;
{$R *.dfm}

type
  TColors = (Red, Green, Blue);

procedure TForm1.Button1Click(Sender: TObject);
var
  Colors: TColors;

begin
  case Colors of
    Red: begin
        ShowMessage('红色');
      end;
    Green: begin
        ShowMessage('绿色');
      end;
    Blue: begin
        ShowMessage('蓝色');
      end;
  end;

end;

Supongo que te gusta

Origin blog.csdn.net/farmer_city/article/details/110121939
Recomendado
Clasificación