OO基础知识关于委托与继承与接口的问题

时间:2011-07-06 11:59:01

标签: c# oop inheritance interface delegates

多年前,我有一个关于OO的课程,其中有一个声明。 我忘记了这个陈述,并想帮助它回到记忆中。

这是以下之一:

  1. 您可以使用代理
  2. 完成使用界面执行的所有操作
  3. 您可以使用接口完成的任何操作都可以通过继承来完成
  4. 您可以使用接口
  5. 完成继承所能做的一切
  6. 您可以使用委托
  7. 完成继承的所有操作

    我知道其中一个而且1必然是完全无效的

    你能否对此有所了解?

3 个答案:

答案 0 :(得分:2)

我同意IAbstract - 代表与继承或接口无关,所以我不认为任何陈述适用。

在我看来,#2是正确的答案。接口提供实现类必须包含的一组方法,属性和事件。默认情况下,您可以通过继承获得此内容:子类可以使用所有超类的非私有属性,方法和事件。

继承为子类提供实现细节(方法体),而接口则不提供;它只提供给定类中可用的内容。这就是为什么我不认为#3是正确的。

答案 1 :(得分:1)

首先,代表实际上与继承或接口没有任何关系 - 因此我将排除1和4。

其次,请考虑interface是以下之一:

abstract class SomeInterface {
/*.. do stuff ..*/ 
}

......或

interface ISomeInterface {
/*.. do stuff ..*/ 
}

为了有用,这些必须由层次结构下的某个具体类继承。通常,在派生类型时,您可以选择从中派生的某个接口。虽然我从未听过以这种方式表达的陈述,但我会选择#3 - 如果在多项选择题测试中给出。

答案 2 :(得分:0)

您已将问题标记为C#,我可以回复。但代表,继承和 实现的接口可能在语言之间的关键方式上有所不同,所以我不确定有关OO的抽象语句是多么有用。

“代理人可以解决的问题也可以通过界面解决。” -C#4.0在NutShell中

MSDN programming guide interface vs delegate

您当然可以通过接口继承所做的一切,但它可能会导致大量冗余代码。因此,当真正需要C#缺乏时,没有很好的替代多重继承。

你可以用高级语言做任何事情,你可以用汇编语言做,但如果你关注生产力,这可能没什么用。