6
Reply

Dynamic allocation of Object type

Mark

Mark

Jun 26 2007 8:41 AM
1.7k
Dear All,

 

I have a program which can read Data from more than one type of source - i.e. a File or XML feed. I have a listview with a list of sources and the source to retrieve from.

 

Is it possible to assign the type of object created without using an IF statement?

 

Here is some code detail. I have an Interface (IData) which has a method ReadData. Two classes - XMLData and CSVFileData implement this interface.

 

Then in a click button event on my Form I have:

 

Type t = typeof(CSVFileData);

messageQueue = Control.LoadData(t, listViewDataSource.SelectedItems[0].SubItems[1].Text);

 

This sends the Type t, and source path (either filename or url) into the static control class.

 

In the Control.LoadData method I run:

 

object o = Activator.CreateInstance(TypeObj);

//check that it implements the IData Interface

IData dataReader = o as IData;

if (dataReader != null)

{

messages = dataReader.ReadData(Source);

}

 

I have everything in place to do everything dynamically. The only thing that I would like to get rid of is the need to say:

(pseudocode)

 

if (listboxValue="CSV") {

   Type t = typeof(CSVFileData);

} else {

   Type t = typeof(XMLData);

}

 

How can I assign the Type (CSVFileData) more dynamically?

I thought about adding an extra field to the listview to hold the Type, but I'm not sure how you'd convert the string literal to a type.

 

I am very new to C# so I hope the above makes sense. Any help/pointers would be greatly appreciated!


Answers (6)