2012-03-02 7 views

Odpowiedz

14

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ę.)

+10

Jedna z naprawdę fajnych funkcji językowych, które Delphi ma w tym C#. –