Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# creating instance of class and set properties by name in string

Tags:

c#

reflection

I have some problem. I want to creating instance of class by name. I found Activator.CreateInstance http://msdn.microsoft.com/en-us/library/d133hta4.aspx and it works fine, and I found this: Setting a property by reflection with a string value too.

But how to do both od this? I mean, I know the name of class, I know all properties in that class and I have this in string. For example:

string name = "MyClass"; string property = "PropertyInMyClass"; 

How to create instance and set some value to properties ?

like image 937
Adrian Księżarczyk Avatar asked Aug 14 '12 18:08

Adrian Księżarczyk


People also ask

What C is used for?

C programming language is a machine-independent programming language that is mainly used to create many types of applications and operating systems such as Windows, and other complicated programs such as the Oracle database, Git, Python interpreter, and games and is considered a programming foundation in the process of ...

What is the full name of C?

In the real sense it has no meaning or full form. It was developed by Dennis Ritchie and Ken Thompson at AT&T bell Lab. First, they used to call it as B language then later they made some improvement into it and renamed it as C and its superscript as C++ which was invented by Dr.

Is C language easy?

C is a general-purpose language that most programmers learn before moving on to more complex languages. From Unix and Windows to Tic Tac Toe and Photoshop, several of the most commonly used applications today have been built on C. It is easy to learn because: A simple syntax with only 32 keywords.

What is C in C language?

What is C? C is a general-purpose programming language created by Dennis Ritchie at the Bell Laboratories in 1972. It is a very popular language, despite being old. C is strongly associated with UNIX, as it was developed to write the UNIX operating system.


2 Answers

You could use Reflection:

using System; using System.Reflection;  public class Foo {     public string Bar { get; set; } }  public class Program {     static void Main()     {         string name = "Foo";         string property = "Bar";         string value = "Baz";          // Get the type contained in the name string         Type type = Type.GetType(name, true);          // create an instance of that type         object instance = Activator.CreateInstance(type);          // Get a property on the type that is stored in the          // property string         PropertyInfo prop = type.GetProperty(property);          // Set the value of the given property on the given instance         prop.SetValue(instance, value, null);          // at this stage instance.Bar will equal to the value         Console.WriteLine(((Foo)instance).Bar);     } } 
like image 178
Darin Dimitrov Avatar answered Oct 08 '22 05:10

Darin Dimitrov


If you had System.TypeLoad Exception, your class name is wrong.

To method Type.GetType you must enter assembly-qualified name. That is with the project name For example: GenerateClassDynamically_ConsoleApp1.Foo

If it is in another assembly jou must enter assembly name after comma (details on https://stackoverflow.com/a/3512351/1540350): Type.GetType("GenerateClassDynamically_ConsoleApp1.Foo,GenerateClassDynamically_ConsoleApp1");

like image 40
Tomáš Václavík Avatar answered Oct 08 '22 04:10

Tomáš Václavík