相关疑难解决方法(0)

接口与基类

我何时应该使用接口,何时应该使用基类?

如果我不想实际定义方法的基本实现,它应该始终是一个接口吗?

如果我有狗和猫类.为什么我要实现IPet而不是PetBase?我可以理解有ISheds或IBarks(IMakesNoise?)的接口,因为那些可以基于宠物放在宠物上,但我不明白哪个用于通用Pet.

language-agnostic oop static-typing interface base-class

754
推荐指数
17
解决办法
15万
查看次数

在设计C#类库时,何时应该在接口上选择继承?

我有一些数字Processor类可以完成两个非常不同的事情,但是从公共代码调用("控制反转"情况).

我想知道在决定它们是否应该全部继承BaseProcessor或实现IProcessor为接口时,我应该认识(或认识到,对于你的USsers)的设计考虑因素.

c# oop inheritance design-patterns interface

67
推荐指数
3
解决办法
5万
查看次数

为什么抽象类需要从它们实现的接口定义抽象方法?

当抽象类实现接口时,还需要定义或声明方法(如前所述):

public interface MyInterface
{
  void Method();
}

public abstract class MyAbstractClass : MyInterface
{
  public abstract void Method(); // required, even though MyAbstractClass does not implement
}

public class MyClass : MyAbstractClass
{
  public override void Method()
  {
  }
}

public interface MyInterface2 : MyInterface
{
  // no need to declare Method() -- why can't abstract classes do the same for unimplemented methods?
}
Run Code Online (Sandbox Code Playgroud)

c#语言的设计原理是什么要求定义实现接口的抽象类的抽象方法?对于一个抽象类来说,定义一个它没有实现的方法似乎是完全多余的(并且更糟糕的是,对于实际实现该方法必须将该方法标记为覆盖的类).我没有理由认为抽象类的行为不像MyInterface2,它继承自MyInterface但不需要声明MyInterface的方法.

c# interface abstract

8
推荐指数
2
解决办法
2473
查看次数

C#复杂继承

假设我们有这样的代码:

interface I
{
    int P { get; }
}

class A : I
{
    public virtual int P { get { return 0; } }
}

class B : A
{
    public override int P { get { return 1; } }
}

class C : B, I
{
    public int P { get { return 2; } }
}

A c = new C();
I ic = new C();
Run Code Online (Sandbox Code Playgroud)

现在的问题是什么是cP和ic.P?其实我知道它会是1和2,但你能解释一下为什么吗?

c# inheritance

4
推荐指数
1
解决办法
717
查看次数