我无法创建一个能够与派生类一起工作的接口实现。我一直以为这是可能的,所以我很困惑为什么我不能这样做。如果我将BaseType
更改为抽象类,也不可能实现。
public interface BaseType {}
public class FirstDerivedClass : BaseType {}
public class SecondDerivedClass : BaseType {}
public interface SomeInterface
{
void Method(BaseType type);
}
public class Implementation : SomeInterface
{
public void Method(FirstDerivedClass type) {}
}
'Implementation'没有实现接口成员'SomeInterface.Method(BaseType)'
为什么这是不可能的?我遇到了一个真实世界中很有用的情况。
例如,Selenium WebDriver有许多浏览器驱动程序。有一个抽象的DriverOptions
类和它的派生类(ChromeOptions
、FirefoxOptions
等)。
这是我面临的一个真实世界问题的例子:
// Third party code - Selenium.
public abstract class DriverOptions {}
public class ChromeOptions : DriverOptions {}
public class FirefoxOptions : DriverOptions {}
// My code
public interface IWebDriverFactory
{
IWebDriver GetWebDriver(DriverOptions options);
}
public class ChromeWebDriverFactory : IWebDriverFactory
{
public IWebDriver GetWebDriver(ChromeOptions options)
{
// implementation details for initalising Chrome and use options from ChromeOptions
}
}
public class FirefoxWebDriverFactory : IWebDriverFactory
{
public IWebDriver GetWebDriver(FirefoxOptions options)
{
// implementation details for initalising Firefox and use options from FirefoxOptions
}
}
SomeInterface a = new Implementation(); a.Method(new SecondDerivedBaseType());
怎么办?Implementation
如何处理这个问题?它只有FirstDerivedBaseType
的实现。 - arekzyla