是否可以在接口的实现类中调用一个方法,该接口未使用接口变量在接口中定义,如下所示:
interface ILookup {
public void someInterfaceMethod1();
public void someInterfaceMethod2();
}
......和实施类:
public class extendedLookUpImplementor: ILookup
{
//constructor
LookUpImplementor(){
}
public void someInterfaceMethod1(){
// Implementation Code here.
}
public void someInterfaceMethod2(){
// Implementation Code here.
}
public void ExtendedMethod(){
// Implementation Code here.
}
}
在客户代码中:
ILookup lookupVar = new LookUpImplementor();
lookupVar -> someInterfaceMethod1(); // i know it will work.
lookupVar -> someInterfaceMethod2(); // i know it will work.
我的问题是,我可以使用lookupVar调用ExtendedMethod,如下所示:
lookupVar -> ExtendedMethod(); // Note again that ExtendedMethod() is not defined in Ilookup interface/contract.
答案 0 :(得分:3)
只有将lookupVar强制转换为extendedLookUpImplementor,或者通过反射我认为。
答案 1 :(得分:0)
首先,正如Ian1971所说,是的,你可以通过将其转换为特定类型,比如说
ILookup lookupVar = new LookUpImplementor();
((extendedLookUpImplementor)lookupVar).ExtendedMethod(); //this should work
或者使用动态/反射。
话虽如此,我真的不认为这是一个很好的方法,因为它会违反合同/接口的目标之一。
例如,如果我们有ILookup变量“lookupVar”
dynamic lookup = lookupVar;
lookup.ExtendedMethod(); //this would work
在任何时候,使用对象lookupVar的代码都不能保证会有一个方法ExtendedMethod并且可以在运行时抛出异常。
我真正的问题是,为什么要添加一个无法在合同中添加的方法,这里的目标是什么。如果该方法正在扩展该类,请尝试通过C# extension method,因为它们可能适合您的方案。