0

パラメータとして取得する型によって、2 つの異なる方法で処理したいアクションがあります。

これらの型は、別の方法で処理することになっている他の型と同じです。これらは、同じインターフェースと同じ抽象クラスから派生します。

どのアクションを実行するかを決定するメソッドで、Type をパラメーターとして取得します。

他のタイプとは一線を画す方法や、ある方法でいつ処理し、いつ別の方法で処理するかを知っていますか?

「ユニークな」タイプのクラスにプロパティを追加し、type.GetProperty("UniqueProp")それがユニークかどうかを知ることを考えました。しかし、私はそれを行うためのより良い、より速い方法が必要だと感じています. 効率的でなければなりません。

4

1 に答える 1

0

型処理クラスをどのように正確に設定したかはわかりませんが、次のようなものがあるとします。

あなたは、両方のクラスが同じインターフェースから派生していると言いました。その後、両方のタイプのクラスに対してIWorkインターフェイスを使用できます。

interface IWork { }

次に、特殊なケースであることがわかっていて別の方法で処理したいクラスを装飾するために使用するカスタム属性を作成できます。

class SpecialAttribute : Attribute { }

これで、特別なケースまたは標準的なケースに役立つクラスを定義できるようになりました。SpecialClassSpecialAttribute属性で装飾します。

[Special]
class SpecialClass : IWork { }

class StandardClass : IWork { }

また、型処理クラスは型をパラメーターとして受け取るとも言いました。その場合は、渡した型がSpecialAttributeで装飾されているかどうかを確認できます。

class HandleTypes
{
    public HandleTypes(Type type)
    {
        if (type.GetCustomAttributes<SpecialAttribute>().Any())
        {
            Console.WriteLine("Special case...");
        }
        else
        {
            Console.WriteLine("Standard case...");
        }
    }
}

この設定は、次の方法でテストできます。

class Program
{
    static void Main()
    { 
        var standard = new StandardClass();
        var special = new SpecialClass();

        new HandleTypes(standard.GetType());
        new HandleTypes(special.GetType());

        Console.Read();
    }
}
于 2013-08-04T15:42:11.033 に答える