【发布时间】:2017-06-03 15:23:07
【问题描述】:
我有 2 个类和一个接口:
Program、superSecretWork 和 openDoor。
我想要做的是,每当我的类使用接口时,我希望该接口调用继承它的类的特定方法。
我知道我可以只使用 superSecretWork 类,但这不是重点。我可能想继承另一个基类,但需要其他类的一部分(由其他接口使用)。
代码示例:
namespace Test
{
class Program: openDoor
{
static void Main(string[] args)
{
}
}
public interface openDoor
{
bool open();
}
public class superSecretWork : openDoor
{
/// <summary>
/// I only want this method to be used when using the interface
/// </summary>
/// <returns></returns>
public bool open()
{
//some custom logic here
return true;
}
}
}
【问题讨论】:
-
接口不是这样工作的。
-
如果你执行 `openDoor obj = new superSecretWork();` 并在
obj上调用方法,它将调用来自superSecretWork类的方法。你为什么不自己做任何事情并试图弄清楚会发生什么? -
类不继承自接口,它实现接口。 MSDN 告诉我们接口“只包含方法、属性、事件或索引器的签名”。接口与实现无关。它们只是数据传递合同。它们为所有实现它们的类定义了必需的成员、属性等。诸如调用方法或定义它们之类的东西完全超出了它们的范围。
-
如果你在同一个例子周围添加更多细节会更清楚。假设有另一个类实现了该接口。现在,如果在该类的对象上调用接口方法,您希望在 program.cs 中发生什么?接口不调用其实现类的任何方法。提供更多示例代码和细节将有助于更多地理解问题。
-
how do you inherit multiple base classes?不应该是原始帖子中的问题吗?这在 Java 和 C# 等现代 OO 语言中是不可能的。您可以通过在一个类中实现两个接口并从该类继承另一个类来做到这一点,这样您就拥有两个接口的功能。
标签: c# inheritance interface