【问题标题】:Are Classes that implement an interface only with no other methods ok?只实现接口而没有其他方法的类可以吗?
【发布时间】:2017-04-09 09:40:01
【问题描述】:

这种情况可以吗?还是我在此过程中误解了什么?

我有一个包含一些受保护变量和一些访问器方法的超类。然后我有 3 个从超类继承的子类,每个子类都有新的和不同的变量和关联的访问器(显然到目前为止还可以)。然后我有一个只包含一个方法而没有变量的接口,它由所有类以不同的方式实现,以处理它们的变量并返回答案。

我在超类中使用的是接口而不是虚拟方法,因为我需要从程序中其他不相关的类调用此方法以返回不同的处理数据。

如果这是一个愚蠢的问题,我很抱歉,我对 C# 还很陌生,并且仍在学习很多东西,需要确认我的理解才能继续前进。我不确定这是否是最好的方法,因为除了访问器和接口的方法之外,这里的所有类都没有其他方法。有没有更好的方法我应该这样做,因为没有方法(除了接口和访问器)的类似乎有点错误?

【问题讨论】:

  • FWIW,这绝不是一个愚蠢的问题。具有一种方法的接口很好。这个问题(和一个好的答案)很容易成为一本书。
  • 我认为这是一个完全合理的问题。有这样的接口是可以接受的(其实微软自己也提供了几个这样的接口,比如IDisposable)。
  • 谢谢大家,我有点担心我会在很长的时间内解决这个问题。
  • 这个问题措辞奇怪且具有参考意义。“没有其他方法”..?其他?.. 什么将方法确定为“其他”,其他的替代方法是什么?仅通过描述,您似乎确定其他方法不止一个?..所以标题应该是“只有一种方法的接口”.. ??
  • 对不起,我的意思是先对 SO 表示欢迎......另外,询问某事是否“ok”是要求主观回答,这将促进一般性讨论和不和谐。但考虑到这个主题,这可能不是什么大问题..

标签: c# class inheritance interface uml


【解决方案1】:

简短回答:您走在正确的轨道上。让超类继承接口,然后在子类中为其提供实现。

abstract class Item : GameObject, ISellable
{ 
}

class GenericLoot : Item {
    public int BasePrice { get; }
}

class Slave : Person, ISellable {
    public int BasePrice { get; }
}

...有点暗,但你明白了。

长答案:在问题的上下文中通过深思熟虑的对象抽象来组织你的类。定义一个只有具体子类的抽象类或没有主体的子类是可以的。只要您忠于所涉及对象的性质即可。

abstract class Person {}

abstract class PlayerCharacter : Person {}

class Batman : PlayerCharacter {}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 2011-06-15
    • 2021-10-31
    • 2014-06-15
    相关资源
    最近更新 更多