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