我希望我的一些方法采用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);
}
有更好的方法吗?我可以将一个对象转换为它的类型??
答案 0 :(得分:6)
您可以使用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();
}
优点:
答案 1 :(得分:2)
实际上,您应该从不使用反射来调用传入的对象的方法。 使用object作为方法的参数类型也不是最佳实践。 您通常希望您的代码是强类型的。
无论如何,如果您希望“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 ...