Saqwes
Saqwes

Reputation: 335

C# Convert dynamic object to interface

namespace MyNameSpace
{
    public interface IMyInterface
    {
        string GetMethod();
    }
    public class MyClass : IMyInterface
    {
       public string GetMethod()
       {}
    }
}

//Main Program

var ruleClass = Activator.CreateInstance(Assembly.GetExecutingAssembly().FullName, "MyNameSpace.MyClass"); 
if( ruleClass != null)
{
   IMyInterface myClass = (IMyInterface)ruleClass;
   //throws exception. 
}

How can I convert ruleClass to IMyInterface type so that I can call specific methods in it?

Upvotes: 1

Views: 3754

Answers (3)

Karthik
Karthik

Reputation: 1074

You can try this option as well

var typ = Type.GetType("MyNameSpace.MyClass", true);
var ruleClass = Activator.CreateInstance(typ);
        if (ruleClass != null)
        {
            IMyInterface myClass = (IMyInterface)ruleClass;
            //myClass is NULL. 
        }`

Upvotes: 0

Joel Legaspi Enriquez
Joel Legaspi Enriquez

Reputation: 1236

Have you tried this?

var ruleClass = Activator.CreateInstance(typeof(MyClass));
if (ruleClass != null)
{
    var myClass = (IMyInterface)ruleClass;
    myClass.GetMethod();
}

Upvotes: 0

EZI
EZI

Reputation: 15364

Use Unwrap method.

IMyInterface myClass = (IMyInterface)ruleClass.Unwrap();

You can create it directly too

var myClass = Activator.CreateInstance(typeof(MyClass)) as MyClass;

Upvotes: 5

Related Questions