w Delphi mogę zadeklarować typ klasy jak takco jest deklaracją C# równoważną delphi "class of" (typ klasy)?
type
TFooClass = class of TFoo;
TFoo=class
end;
który jest równoważny C# dla tej deklaracji?
w Delphi mogę zadeklarować typ klasy jak takco jest deklaracją C# równoważną delphi "class of" (typ klasy)?
type
TFooClass = class of TFoo;
TFoo=class
end;
który jest równoważny C# dla tej deklaracji?
Najbliższe, które można uzyskać w języku C#, jest typ Type
, który zawiera metadane dotyczące typu.
public class A { }
public static int Main(string[] args)
{
Type b = typeof(A);
}
To nie dokładnie samo. W Delphi "typ innego typu" jest typem, który można przypisać do zmiennej. W języku C# "typ innego typu" jest instancją System.Type
, którą można przypisać do dowolnych zmiennych typu System.Type
.
Jako przykład w Delphi, można to zrobić:
type
TAClass = class of TA;
TA = class
public
class procedure DoSomething;
end;
var x : TAClass;
begin
x := TA;
x.DoSomething();
end;
Nie można czegoś takiego zrobić w C#; nie można wywoływać metod statycznych typu A z instancji Type
, które zdają się przechowywać typeof(A)
, ani nie można zdefiniować zmiennej, która może mieć typy pochodne.
(Pewne szczególne wzory, które typy Delphi metaklasą są wykorzystywane do, może być dokonane za pomocą rodzajowych:
public class A { }
public class ListOfA<T> where T: A { }
W tym przypadku T jest „typ A” i niezależnie od klasy pochodną A zastosowano do skonstruuj klasę.)
Jedna z naprawdę fajnych funkcji językowych, które Delphi ma w tym C#. –