C#将动态对象转换为接口

C#将动态对象转换为接口,c#,interface,C#,Interface,//主程序 namespace MyNameSpace { public interface IMyInterface { string GetMethod(); } public class MyClass : IMyInterface { public string GetMethod() {} } } 如何将ruleClass转换为IMyInterface类型,以便调用其中的特定方法?使用Unwr

//主程序

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

如何将
ruleClass
转换为
IMyInterface
类型,以便调用其中的特定方法?

使用
Unwrap
方法

var ruleClass = Activator.CreateInstance(Assembly.GetExecutingAssembly().FullName, "MyNameSpace.MyClass"); 
if( ruleClass != null)
{
   IMyInterface myClass = (IMyInterface)ruleClass;
   //throws exception. 
}
您也可以直接创建它

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

使用
展开方法

var ruleClass = Activator.CreateInstance(Assembly.GetExecutingAssembly().FullName, "MyNameSpace.MyClass"); 
if( ruleClass != null)
{
   IMyInterface myClass = (IMyInterface)ruleClass;
   //throws exception. 
}
您也可以直接创建它

IMyInterface myClass = (IMyInterface)ruleClass.Unwrap();
你试过这个吗

var myClass = Activator.CreateInstance(typeof(MyClass)) as MyClass;
你试过这个吗

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

您也可以尝试此选项

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

您也可以尝试此选项

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

我根本没有得到
myClass
的空值-当您尝试强制转换时,我得到一个异常…是的。它抛出一个异常。“展开”方法确实对我有效。对-请在描述您在以后的问题中观察到的内容时更加小心。我根本没有得到
myClass
的空值-当您尝试强制转换时,我会得到一个异常…是的。它抛出一个异常。“展开”方法确实对我有效。对-请在描述您在未来问题中观察到的内容时更加小心。这是解决问题的正确方法
CreateInstance
在本例中,返回一个
ObjectHandle
,而不是
MyClass
这是修复它的正确方法
CreateInstance
在本例中返回一个
ObjectHandle
,而不是
MyClass