次のコードを考える:抽象基本クラスまたはインタフェース?どちらも思えない右
using System.Collections.Generic;
static class Program {
static void Main() {
bar Bar = new bar();
baz Baz = new baz();
System.Console.WriteLine(
"We have {0} bars, rejoice!", bar.Cache.Count);
}
}
public abstract class foo {
public static List<foo> Cache = new List<foo>();
}
public class bar : foo {
public bar() { Cache.Add(this); }
}
public class baz : foo {
public baz() { Cache.Add(this); }
}
をあなたが(多少期待される)出力を得る「私たちは喜ぶ、2つのバーを持っているの!」。
これはすごく面白いですが、私たちはビールを飲む場所を2倍に増やしました(明らかに)が、本当に欲しいのは、各クラスが自分のキャッシュを持つことです。私がサブクラスでこのキャッシュを実装したくない理由は、キャッシュ上で操作できる(つまり、それらのすべてを反復する)必要がある抽象クラスにいくつかのメソッドがあるためです。これを行う方法はありますか?私はfoo
のインターフェイスを使用してみましたが、インターフェイスで静的メンバーをインターフェイスの一部として定義することはできません。ここで
「新しい回答を読み込む」機能があります。私はこれを掲載しようとしていた。 – moffdub
ICacheは一般的なキャッシュタイプへのインターフェイスですか?実際には、あなたが正しいと思っていますが、thinkcubeの答えが私が最初に探していたものに近いものの、私はこれがより好きです。これは私が今でもやるより多くの設計作業です;) –
私はこれがより良いことに同意します。それぞれのサブクラスは、独自のシングルトンを提供することを心配する必要があります。コードの複製の潜在性代わりにジェネリックを使用して、クラスごとのシングルトンを取得し、GetCache()を使用して一度公開することはできますが、各サブクラスはそれを実装する必要はありません。 –