将类的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();
}
答
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();
}
通常有比在运行时得到一个InvalidCastException更好的选择。 –