Преобразование строки к имени класса

Не помещайте никакой код в файлы .h.

.h файлы предназначены для объявлений данных, объявлений внешних переменных и объявлений функций.

.c файлы являются правильным местом для определения переменных и функций.

Переместите весь код из файлов .h в файлы .c

Также добавьте защиту файлов .h. Это просто определение. Если это определение уже определено - это означает, что этот файл уже был включен и его содержимое должно быть пропущено

#ifdef MYGUARD_H
#define MYGUARD_H

/* .h file content

#endif
41
задан RLH 6 January 2015 в 12:16
поделиться

2 ответа

Ну, с одной стороны ArrayList не универсально..., Вы имели в виду List<Customer>?

можно использовать Type.GetType(string) для получения Type объект, связанный с типом его именем. Если блок не будет или mscorlib или в настоящее время выполняющимся типом, то необходимо будет включать имя сборки. Так или иначе Вам будет нужно пространство имен также.

Вы уверенный, что Вам действительно нужен универсальный тип? Дженерики главным образом обеспечивают время компиляции безопасность типов, которую ясно Вы не будете иметь, большая часть если Вы найдете тип во время выполнения. Вы можете находить это полезным хотя...

Type elementType = Type.GetType("Customer");
Type listType = typeof(List<>).MakeGenericType(new Type[] { elementType });

object list = Activator.CreateInstance(listType);

, Если Вам нужно к , делают что-либо с тем списком, Вы, возможно, должны сделать больше универсального отражения хотя..., например, назвать общий метод.

63
ответ дан Jon Skeet 27 November 2019 в 00:34
поделиться

Это - отражательный вопрос. Необходимо найти, что тип затем инстанцирует экземпляра его, чего-то вроде этого:

Type hai = Type.GetType(classString,true);
Object o = (Activator.CreateInstance(hai));  //Or you could cast here if you already knew the type somehow

или, CreateInstance (assemblyName, имя класса)

необходимо будет не упустить столкновения пространства имен/типа, хотя, но это добьется цели для простого сценария.

кроме того, перенесите это в попытку/выгоду! Активатор. CreateInstance страшен!

17
ответ дан pezi_pink_squirrel 27 November 2019 в 00:34
поделиться