2016-11-25 8 views
3

このシナリオはOKですか、途中で何か誤解していますか?インタフェースを実装しているクラスは他の方法でしか使えないのですか?

私はいくつかの保護された変数といくつかのアクセサメソッドを持つスーパークラスを持っています。次に、スーパークラスから継承した3つのサブクラスがあり、それぞれに新しい変数と異なる変数があります(明らかにこれは今までのところOKです)。それから私は、1つのメソッドと、変数を処理し、答えを返すために、すべてのクラスによって異なって実装されている変数がないインターフェイスを持っています。

スーパークラスの仮想メソッドではなくインターフェイスを使用しています。処理された別のデータを返すために、プログラム内の他の無関係なクラスからこのメソッドを呼び出す必要があります。

申し訳ありませんこれは愚かな質問ですが、私はC#にはまだ新しく、まだ多くのことを学び、私が上に進む前に私の理解を確認する必要があります。私はこれを行うための最良の方法であるかどうかは不明です。なぜなら、ここのすべてのクラスはアクセサやインターフェイスのメソッド以外に他のメソッドを持たないからです。メソッドがないクラス(インターフェイスやアクセサ以外)が少し間違っているように見えるので、私はこれを行うべきであるという良い方法がありますか?

+2

FWIW、これは愚かな質問から遠いです。 1つのメソッドのインターフェースは問題ありません。この質問(と良い答え)は簡単に本になるかもしれません。 – jdphenix

+0

私はそれが完全に合理的な質問だと思う。そのようなインターフェイスを持つことは受け入れられます(実際には、Microsoft自身がIDisposableなどのいくつかのインターフェイスを提供します)。 – EJoshuaS

+0

私はちょっと心配していました。 – Dan

答えて

0

短い答え:正しい軌道に乗っています。スーパークラスにインターフェイスを継承させ、サブクラスでそれを実装します。

abstract class Item : GameObject, ISellable 
{ 
} 

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

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

...少し暗いですが、あなたはアイデアを得ます。

長い答え:あなたの問題の文脈におけるオブジェクトの慎重な抽象化によって、クラスを整理します。具体的なサブクラスだけを持つ抽象クラス、またはNOのボディを持つサブクラスを定義するのはOKです。あなたが関わっているオブジェクトの本質に忠実である限り、ちょうどそうです。

abstract class Person {} 

abstract class PlayerCharacter : Person {} 

class Batman : PlayerCharacter {} 
関連する問題