en Delphi que puede declarar un tipo de claseal igual queque es la declaración C# equivalente de delphi "clase de" (tipo de clase)?
type
TFooClass = class of TFoo;
TFoo=class
end;
¿Cuál es el equivalente C# de esta declaración?
en Delphi que puede declarar un tipo de claseal igual queque es la declaración C# equivalente de delphi "clase de" (tipo de clase)?
type
TFooClass = class of TFoo;
TFoo=class
end;
¿Cuál es el equivalente C# de esta declaración?
Lo más cercano que puede obtener en C# es el tipo Type
, que contiene los metadatos sobre un tipo.
public class A { }
public static int Main(string[] args)
{
Type b = typeof(A);
}
No es exactamente la misma. En Delphi, "type of othertype" es en sí mismo un tipo que puede asignar a una variable. En C# "type of othertype" es una instancia System.Type
que se puede asignar a cualquier variable del tipo System.Type
.
A modo de ejemplo, en Delphi, usted puede hacer esto:
type
TAClass = class of TA;
TA = class
public
class procedure DoSomething;
end;
var x : TAClass;
begin
x := TA;
x.DoSomething();
end;
No se puede hacer nada como esto en C#; no puede llamar a métodos estáticos de tipo A desde instancias de Type
que suceden para contener typeof(A)
, ni puede definir una variable que puede solo mantener typeof(A)
o tipos derivados.
(Algunos patrones específicos que los tipos de Delphi metaclase se utilizan, pueden llevarse a cabo utilizando los genéricos:
public class A { }
public class ListOfA<T> where T: A { }
En este caso, T es el "tipo de A" o lo que sea clase derivada de A se utilizó para construir la clase.)
Una de las características de lenguaje realmente agradables que Delphi tiene que C# no. –