2015-07-08 5 views
1

В Delphi, когда я хочу создать object из неопределенного полученного class, я использовал class of заявление;Есть ли способ инициализировать объект из ссылочного класса в C#?

TShape = class 
public 
    procedure Draw; 
end; 

TCircle = class(TShape) 
public 
    procedure Draw; 
end; 

TShapeClassRef = class of TShape; 

и я создавал объект как;

var 
    ref:TShapeClassRef; 
    drawing:TShape; 
begin 
    ref:=TCircle; 
    drawing:=ref.Create; 
    drawing.draw; //this is a circle object, and it draws circle 
end; 

Я не мог найти ничего подобного в C#.

+1

Вы ищете что-то вроде 'Activator .CreateInstance (yourTypeGoesHere) '? – derape

+0

C# не имеет метаклассов. Так что нет прямого аналога. Да, вы можете использовать отражение, но мне это действительно не нравится. Я лично считаю, что лучший способ - это то, что я написал в ответ на связанный обман: * И еще одним вариантом является замена словаря классов на словарь делегатов, которые возвращают новый экземпляр вашего объекта. С синтаксисом лямбда этот параметр дает очень чистый код. * –

ответ

3

Использование Type так:

public class TShape { } 

И:

Type t = typeof(TShape); 

Для инициализации объекта через t переменной, используйте Activator.CreateInstance(t):

Shape shp = (Shape)Activator.CreateInstance(t); 
+0

Это всего лишь половина моего вопроса, как мне инициализировать объект с помощью переменной «t» Тип t = typeof (TCircle); Форма shp = new t(); ? –

+0

Нравится это: Форма shp = (Shape) Activator.CreateInstance (t); см. мой обновленный ответ. –

+0

Большое вам спасибо, вы были очень полезны :) –

Смежные вопросы