Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将方法参数强制转换为类。接口相关_C#_.net - Fatal编程技术网

C# 将方法参数强制转换为类。接口相关

C# 将方法参数强制转换为类。接口相关,c#,.net,C#,.net,我有三个实现接口的类,我需要一个接受这样一个对象的方法。接口,例如: public interface IFoo { void DoThis(); } 其中一类: public class Bar: IFoo { public void DoThis(); } 以及我想要的方法,即在表格上: private void DoStuff(object o){ o.DoThis(); } 如何实现在DoStuff(对象o)方法中调用DoThis()方法?这应该可以: private

我有三个实现接口的类,我需要一个接受这样一个对象的方法。接口,例如:

public interface IFoo {
  void DoThis();
}
其中一类:

public class Bar: IFoo {
  public void DoThis();
}
以及我想要的方法,即在表格上:

private void DoStuff(object o){
  o.DoThis();
}
如何实现在
DoStuff(对象o)
方法中调用
DoThis()
方法?

这应该可以:

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();
}

像这样声明您的方法::

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

否则不能使用
IFoo
接口成员

如果签名无法更改,另一个选项:

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

通常有比在运行时获取InvalidCastException更好的选项。
private void DoStuff(object o){
  IFoo foo = (IFoo) o;    
  foo.DoThis();
}