2013-02-20 2 views
1

Могу ли я получить свойства класса, если у меня есть имя класса в виде строки? Мои объекты находятся в проекте библиотеки классов, и я попробовал разные методы, чтобы получить тип и получить сборку, но я не могу получить экземпляр класса.Получить свойства класса по имени класса в виде строки в C#

var obj = (object)"User"; 
var type = obj.GetType(); 
System.Activator.CreateInstance(type); 

object oform; 
var clsName = System.Reflection.Assembly.GetExecutingAssembly().CreateInstance("[namespace].[formname]"); 

Type type = Type.GetType("BOEntities.User"); 
Object user = Activator.CreateInstance(type); 

ничего не работает

+0

Просто, чтобы быть уверенным, то 'тип User' не в сборке, вы уже ссылаться? Потому что тогда вам следует просто использовать 'var type = typeof (User);' как ваш первый шаг. –

ответ

3

Я подозреваю, что вы ищете:

Type type = Type.GetType("User"); 
Object user = Activator.CreateInstance(type); 

Примечание:

  • Это будет смотреть только в mscorlib и в настоящее время выполнения сборки, если вам также укажите сборку в названии
  • Это должно быть имя с именем пространства имен, например. MyProject.User

EDIT: Для того, чтобы получить доступ к типу в различной сборки, вы можете использовать либо имя типа сборки-квалифицирован, или просто использовать Assembly.GetType, например,

Assembly libraryAssembly = typeof(SomeKnownTypeInLibrary).Assembly; 
Type type = libraryAssembly.GetType("LibraryNamespace.User"); 
Object user = Activator.CreateInstance(type); 

(Обратите внимание, что я не затрагивал получать свойства как ничто другое в вашем вопросе говорило об этом. Но Type.GetProperties должен работать нормально.)

+0

это не работает, я сказал, что мой класс находится в другом проекте, как я могу получить ссылку на эту сборку? –

+1

@ImranRashid: Вы упомянули, что это было в проекте библиотеки классов, но вы не сказали, где * этот код * работает. Вот почему важно быть ясным. Будет редактировать. –

+0

Type.GetType ("BOEntities.User") возвращает null. Я запускаю его в проекте Unit Test –

1

Могу ли я получить свойство класса, если у меня есть имя класса в виде строки?

Конечно:

var type = obj.GetType(); 
PropertyInfo[] properties = type.GetProperties(); 

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

var type = obj.GetType(); 
PropertyInfo[] properties = type.GetProperties(BindingFlags.NonPublic); 
0

Попробуйте

Type type = Type.GetType("Assembly with namespace"); 
Смежные вопросы