在vb我可以做到
sub SetFocusControl(byref ctl as object)
ctl.Focus
end sub
在c#编译抱怨该对象没有Focus方法
void SetFocusControl(ref object ctl)
{
ctl.Focus();
}
我怎样才能在c#中做同样的事情?
感谢
答案 0 :(得分:4)
使用具有Focus方法的类型,而不是使用object。
void SetFocusControl(Control ctl)
{
ctl.Focus();
}
我认为你不需要参考。
我还问你是否需要一个单独的方法。你能不能直接调用Focus方法吗?
ctl.Focus();
如果您不知道类型或者它是否有Focus方法,您可以这样做。
void SetFocusControl(object ctl)
{
Control control = ctl as Control
if (null == control)
return;
control.Focus();
}
答案 1 :(得分:1)
Javier-你应该阅读why C# is statically typed。
答案 2 :(得分:0)
我不能说为什么这在VB中有效,但在c#中,你已经将ctl声明为类型对象。 Object有四个公共方法ToString,GetHashcode,GetType和Equals。要在c#中执行此操作,您需要接受不同类型的方法,如Control,具有Focus方法(或具有该方法的接口),或者在收到参数后,您需要进行类型转换和检查将对象转换为具有Focus方法的类型。