3

キーと値のペアを格納するだけのテンプレート/ジェネリック クラスがあるとします。

public class GenericDatabase<Key, T>
{
 public Dictionary<Key, T> Data { get; set; }               

 public GenericDatabase()
 {
   Data = new Dictionary<Key, T>();
 }
 ...
}

明確にするために、新しいメソッドやメンバー変数を導入せずにクラスを派生させることは許容されますか? たとえば、キャラクター データベースが必要だとします。

public class CharacterDatabase : GenericDatabase<string, CharacterStat>
{
   // no new methods or member variables
}
4

4 に答える 4

3

IMOわかりやすくするために継承のレベルを導入すると、他の開発者が混乱する可能性があります。ジェネリック宣言は十分に明確だと思います。

GenericDatabase<string, CharacterStat>
于 2013-02-04T06:29:29.187 に答える
1

それは別の言語です..しかし、c++がそのstd::stringクラスをどのように定義しているかを見てください。

typedef basic_string<char> string;

この慣行は一般的であるだけでなく、標準ライブラリの作成者自身によっても使用されていることを指摘したかっただけです。

CharacterDatabaseかなりの回数使用する場合は、このような手順をサポートします。さらに、C# が継承以外の単純なメカニズム (C++ のようなtypedef) を提供するかどうかはわかりませんが、それが望ましいでしょう。

using ディレクティブは typedef のように使用できますが、宣言されているファイルにのみ影響します。

using CharacterDatabase = GenericDatabase<string, CharacterStat>
于 2013-02-04T06:30:16.313 に答える
1

OOP では、それを妨げるものは何もありません。ただし、何かを示すために基本クラスではなくマーカー インターフェイスを使用する多くの場所を見てきました。通常、マーカー インターフェイスには public メンバーがなく、クラスを何かの例としてマークするためにのみ使用されます。

次のリンクをご覧ください。

ウィキペディア => マーカー インターフェイス パターン

マーカーインターフェースとは

于 2013-02-04T06:30:47.900 に答える
1

私にとっては、使用される具体的なタイプによって異なります。

もしわたしが持っていたら

GenericDatabase<string, CharacterStat>

そのままにしておきます-明らかです。しかし、もし私が持っていたら

GenericDatabase<string, ArrayList<Pair<CharacterStat,Integer> > >

それから私は間違いなくそれに名前を付けます、そして本当に説明的なものです;)。

于 2013-02-04T20:11:57.340 に答える