当前位置: 首页 > 知识库问答 >
问题:

当基类实现派生类时,在派生类上指定实现接口

刁钧
2023-03-14
public interface IFoo
{
  void Bar();
}

public abstract class Base : IFoo
{
  public abstract void Bar();
}

public class Derived : Base, IFoo // does this make any difference?
{
  public override void Bar()
  {
    // do something
  }
}

共有1个答案

卜勇
2023-03-14

考虑效仿你的例子。以下必须是可能的吗?

void f(Base b){
    IFoo ifoo = b;
} 

因为对象b是一个Base,所以它必须是一个IFoo,因为Base实现了IFoo。现在考虑以下内容。

var d = new Derived();
f(d);

由于d是派生的,所以它是基,因为派生继承自基。正因为如此,我们可以将它传递给f,然后在那里它被分配给一个IFoo,就像我们以前所做的那样。

 类似资料:
  • 问题内容: 如下代码: 产生以下错误: 错误CS0738:“ InheritanceTest.MyData”未实现接口成员“ InheritanceTest.ISomeData.Data”。’InheritanceTest.MyData.Data’无法实现’InheritanceTest.ISomeData.Data’,因为它没有匹配的返回类型’System.Collections.Generic

  • 我正在学习一本书,即“.NET域驱动的C#设计”。 问题基于如下类图所示的场景: 图:http://screencast.com/t/a9uuljvw0 现在,如果我用ICompanyRepository变量comrep调用Add()函数... 然后调用RepositoryBase类(它是CompanyRepository的父类)中的Add()函数。 我的问题是:在(抽象基)类“repositor

  • 在这种情况下,输出将是“base”。 如果我明确地声明派生实现了IBase(实际上已经由基类base实现了,这样的注释似乎没有用),那么输出将是“派生的” 这种行为的原因是什么? VS 15.3.5,C#7

  • 我可以写: 但这当然不起作用,因为调用返回的是而不是我想要的。 我可以通过在(以及和等)中键入类型并抑制警告来避免这个问题,但是即使只有(比方说)10个扩展的实体类,这仍然是为了键入而编写的样板代码。此外,我认为,如果我必须为每个派生类编写代码(无论多么小)(也会有其他类似的方法),那么拥有类层次结构的好处就会丧失很多。 对此有更好的解决方案吗? 更新:使用Java7。

  • 假设我有一个没有数据的类: 和派生类 Empty类的对象的大小为1。派生类的空部分的大小通常为0。据我所知,编译器看到基Empty类没有数据,因此它可以优化Empty的大小,以防它“在”Derived中,但标准并不要求这样做。 所以问题是: 我能在编译时确定Derived类的Empty部分并没有占用内存吗。 我知道我可以像一样进行检查...但它太冗长了,并且有几个类,如派生。有没有更优雅的解决方案

  • 一个类的对象经常会是另一个类的对象。例如,矩形当然是四边形(正方形、平行四边形和梯形也是这样),因此可以说矩形类 Rectangle 是从四边形类 Quadrilateral 继承而来的。在本例中,类 Quadrilateral 叫做基类,类 Rectangle 称为派生类。矩形是四边形的一种特殊类型,但是要说四边形是矩形则是不正确的。图 9.1 示例了几个简单的继承例子。 基类 派生类 stud