标记应该与其他实体区别对待的实体

时间:2013-08-04 14:18:24

标签: c# .net reflection properties interface

我想通过我作为参数获得的类型以两种不同的方式处理我的动作。

这些类型与我应该以不同方式处理的其他类型相同。 它们派生自相同的接口和相同的抽象类。

决定要执行的操作的方法,将Type作为参数。

您是否知道如何使其与其他类型区别开来,并知道何时以一种方式处理它以及何时以第二种方式处理它?<​​/ p>

我想过将属性添加到“唯一”类型的类中,并通过type.GetProperty("UniqueProp")知道它是否唯一。 但我觉得必须有一种更好,更快的方法。它必须高效。

1 个答案:

答案 0 :(得分:0)

我不知道您是如何设置类型处理类的,但假设您有类似以下内容。

你说你的两个类都来自同一个接口。然后,您可以为两种类型的类提供 IWork 接口。

interface IWork { }

然后你可以创建一个自定义属性,你将用它来装饰你知道特殊情况的类,并且你想要以不同的方式处理。

class SpecialAttribute : Attribute { }

现在,您可以定义将用于特殊情况或标准情况的类。使用 SpecialAttribute 属性装饰 SpecialClass

[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();
    }
}