将类型对象动态转换为类型(某些类)
本文关键字:类型 对象 动态 转换 | 更新日期: 2023-09-27 18:32:20
我希望我的一些方法采用Object
并将其转换为可用的类型:
*简单示例
public void PostAction (object act){
object Action = (act.GetType) act;
string ActionName = Action.PostName;
}
通过环顾互联网和Stackoverflow,我发现只有没有类型即可调用对象方法的方法
。public void PostAction (object act){
Type t = act.GetType(); // myObject.GetType() would also work
MethodInfo GetPostName = t.GetMethod("GetPostName");
GetPostName.Invoke(act, null);
}
有没有更好的方法?我可以将对象转换为其类型吗?
您可以使用
dynamic
:
public void PostAction (object act){
((dynamic)act).GetPostName();
}
但我会更进一步并改变方法:
声明与
GetPostName
方法的接口:public interface IMyInterface { void GetPostName(); }
在类中实现接口
更改
PostAction
方法以采用IMyInterface
参数:public void PostAction(IMyInterface act)
使用接口方法与
PostAction
方法:public void PostAction(IMyInterface act) { act.GetPostName(); }
好处:
- 会给你一个编译时类型安全
- 会更快,因为不需要反射
实际上,您永远不应该使用反射来调用传入的对象的方法。而且,使用对象作为方法的参数类型也不是真正的最佳实践。您通常希望对代码进行强类型化。
无论如何,如果您希望"object"作为参数的类型,只需将对象转换为接口或类型:
public interface IMyInterface
{
string GetPostName();
}
public void PostAction(object actObject)
{
var action = actObject as IMyInterface;
if (action != null)
{
var postName = action.GetPostName();
}
}
如果像这样进行转换,如果对象没有实现该接口,结果可能是 null,这就是为什么您可能需要检查 null...