JSON ベースの API を表すクラス階層があります。.NET 4 (サードパーティのライブラリなし) を使用して、API を呼び出してクラスに逆シリアル化する汎用ファクトリがあります。クラスをインスタンス化して、各クラスに固有の読み取り専用の情報を取得する必要がないようにしています。
私は (これとこれを読み始めるまでは...) 静的 URL を基本クラス/インターフェースに関連付け、それを派生クラスのコンストラクターに設定すると思っていました。次のようなもの (この例は機能しません):
abstract class url {
public abstract static string URL; // This is invalid syntax!
}
class b : url {
static b () { URL = "http://www.example.com/api/x/?y=1"; }
}
class c: url {
static c () { URL = "http://www.example.com/api/z"; }
}
// ... so the factory can do something like ...
b result = doJSONRequest<b>(b.URL);
これはうまくいきません。static フィールドは抽象化できません。また、静的変数は定義されているクラス (この場合は url) に格納されるため、 bとc で一意に設定することもできません。
クラスをインスタンス化せずに項目 (など) にアクセスできるように、読み取り専用の項目をクラスに関連付けるにはどうすればよいですか?