что такое объявление C # эквивалент delphi "класс" (тип класса)? - PullRequest
11 голосов
/ 02 марта 2012

В Delphi я могу объявить тип класса , например,

type
  TFooClass = class of TFoo;
  TFoo=class
  end;

Что является эквивалентом C # для этой декларации?

1 Ответ

14 голосов
/ 02 марта 2012

Наиболее близким к C # является тип Type, который содержит метаданные о типе.

public class A { }
public static int Main(string[] args)
{
  Type b = typeof(A);
}

Это не точно то же самое. В Delphi «тип другого типа» сам по себе является типом, который можно назначить переменной. В C # «тип другого типа» - это экземпляр System.Type, который может быть присвоен любой переменной типа System.Type.

Например, в Delphi вы можете сделать это:

type
  TAClass = class of TA;
  TA = class
  public
    class procedure DoSomething;
  end;

var x : TAClass;
begin
  x := TA;
  x.DoSomething();
end;

Вы не можете делать ничего подобного в C #; вы не можете вызывать статические методы типа A из экземпляров Type, которые содержат typeof(A), и вы не можете определить переменную, которая может только содержать typeof(A) или производные типы.

(Некоторые конкретные шаблоны, для которых используются типы метаклассов Delphi, могут быть выполнены с использованием обобщенных шаблонов:

public class A { }
public class ListOfA<T> where T: A { } 

В этом случае T - это «тип A» или любой другой производный класс A, использованный для его создания.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...