私はこのようなユーザーの簡単な構造を有しています。誰がそれを使用するかによって、システムは異なった動作をする必要があります。動的
アドミニストレーターは、閲覧や購入ができ、注文や商品を混乱させることがあります。
お客様は閲覧して購入することができます。
ゲストは閲覧のみできます(もちろんログイン/ reg)。
IUser
であるAuthentication class
のプロパティまたはフィールドが必要なので、誰でも管理者、顧客、およびゲストをインスタンス化することができます。 問題は、私はこのIUserだけを持っているとき、私はインスタンス化するとき、私は基本的に何もすることはできません。
質問:私はそのフィールドやプロパティをロードしたいが、それでもその機能にアクセスしたいが、指定されたユーザーだけがアクセスできるので、管理者がログインしている場合は管理者の仕事をしたい。顧客がログインしている場合は、商品などを一覧表示できるだけですみます。これを行う方法?
EDIT:はGet()
方法のみobject
を与えるが、それはGuest
によって呼び出された場合、それはユーザーレビューする必要があることを反映
public class Guest : IUser
{
public Guest()
{
}
public object Get()
{
Type type = this.GetType();
var result = Activator.CreateInstance(type);
return result;
}
}
としよう。 Admin
によって呼び出された場合は、Adminでなければなりません。 オーバーライドを使用してこれを行うことはできますが、後で変更することは困難です。
だから私はこれをしたい:ゲスト、管理者から呼び出された場合は管理者から呼び出された場合MyObject
ゲストである
(MyObject)Activator.CreateInstance(type);
。私は何が欠けていますか?もちろん、ジェネリックスを試しましたが、インターフェイスを実装するときには具体的な型が必要です。基本的にはすべての子孫クラスに実装する必要があります。
このスキームを使用する場合は、既に指摘したように、うまくいきません。クラスの継承方法を変更する必要があります。あなたはそうは思わない?私は 'IUser'が公開メソッド' Login'を必要としていると思います –
お問い合わせいただきありがとうございます。 これは私にとってだけではなく、他にもたくさんの方法があります。ここでは簡単にしたいと思っています。 私は 'IUser'で定義されたメソッドで' reflection'を使用します。実際の変数の型を返す 'Get()'と言います。ドバイ? – agiro
私はすでにこれをいくつかのゲームで使っています。基本的に、 'Monster'クラスと' User'クラスは 'Unit'から派生しています。私は基本クラスでメソッド 'GetUnitType()'を定義しています。それもかなり速いです:) –