将类的Cast方法参数传递给类。接口相关

问题描述:

我有三个类实现一个接口,我需要一个接受这样的对象的方法。例如,该接口:将类的Cast方法参数传递给类。接口相关

public interface IFoo { 
    void DoThis(); 
} 

其中一个类:

public class Bar: IFoo { 
    public void DoThis(); 
} 

我想有,即表单上的方法:

private void DoStuff(object o){ 
    o.DoThis(); 
} 

我怎样才能做到这一点我可以拨打DoStuff(object o)方法中的DoThis()方法?

声明你的方法,像这样::

private void DoStuff(IFoo o){ 
      o.DoThis(); 
    } 

,否则你不能使用IFoo接口成员。

这应该工作:

private void DoStuff(IFoo o){ 
    o.DoThis(); 
} 

或者这样:

private void DoStuff(object o){ 
    IFoo ifoo; 
    try 
    { 
     ifoo = (IFoo)o; 
    } 
    catch(InvalidCastException ice) 
    { 
     /* whatever "this isn't IFoo" logic you want here */ 
     throw; 
    } 
    ifoo.DoThis(); 
} 
+1

通常有比在运行时得到一个InvalidCastException更好的选择。 –

private void DoStuff<T>(T o) where T : IFoo 
{ 
    o.DoThis(); 
} 

OR

private void DoStuff(object o) 
{ 
    IFoo foo = o as IFoo; 
    if (foo != null) 
    { 
     foo.DoThis(); 
    } 
} 

另一种选择,如果签名不能改变:

private void DoStuff(object o){ 
    IFoo foo = (IFoo) o;  
    foo.DoThis(); 
}