0

C# でコンストラクターに渡されるパラメーターに基づいて、クラス内のいくつかのメソッドを非表示にする必要があります。どうすればいいですか?前もって感謝します!

詳細情報: 私はこの GUI 開発の一部であり、ハードウェアのレジスタにアクセスできる API がありました。現在、彼らは新しいハードウェアをリリースしているので、新しい API を持つ古いものと新しいものの両方をサポートする必要があります (ほとんどの場合、古いものの複製で、一部の古いものが削除され、いくつかの新しいレジスタが追加されています)。

さらに、この「API」というクラスは、さまざまな場所で使用したため、この 1 つのクラスだけにしておく必要があります。そのため、別の名前の新しい API を使用するという考えは除外されました。

最後に、レジストリ アクセス メソッドを条件付きで非表示にするだけで、新しいものを古いものに含めるというこのアイデアを思いつきました。

4

5 に答える 5

5

メンバーの表示を切り替えることはできません.....最善の策は、メンバーを非表示にするさまざまなインターフェイスを用意することです。

public interface IName
{
   string Name { get; set; }
}


public interface INumber
{
   string PhoneNumber { get; set; }
}


public class Worker : IName, INumber
{
    public string Name { get; set; }
    public string PhoneNumber { get; set; }
}

したがって、INameまたはINumberインターフェイスを介してWorkerを使用すると、クラスの他のメンバーが非表示になります。

于 2012-01-25T21:25:59.583 に答える
0

ここでリファクタリングを検討しているのではないかと思います。パラメータに関係なく同じように動作するすべてのメソッド/プロパティを使用して基本クラスを作成してから、動作が異なる2つの子クラスを作成してみてください。クラスファクトリパターンもご覧ください。

于 2012-01-25T21:27:34.997 に答える
0

メソッドの可視性を変更することはできませんが、パラメーターを単一のメソッドに渡し、switch-を使用してパラメーターに応じていくつかのロジックを実行できますcase。ただし、メソッドの構造によって異なります。
クラスを確認して、そのデザインを変更してみてください。多分あなたはあなたを助けるどんなデザインパターンも見つけることができます。

于 2012-01-25T21:30:47.417 に答える
0

コードを複数のクラスまたはインターフェースに再構築する必要があります。パラメータ値に基づいてクラスメンバーの可視性レベルを動的に変更することはできません。メンバーは、実行時間ではなく、建設時間情報です。

于 2012-01-25T21:28:06.400 に答える
0

動的コード生成を使用して実際に同様のことを行うこともできますが、これは本番環境で使用する必要がある実際のコードというよりはハックに似ています。

なぜこれが必要なのかを説明すれば、より適切な答えが得られるかもしれません。

于 2012-01-25T21:35:35.430 に答える