【问题标题】:Mark an entity that's supposed to be handled differently from other entities标记一个应该与其他实体不同处理的实体
【发布时间】:2013-08-05 07:38:59
【问题描述】:

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

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

决定做什么动作的方法,获取Type作为参数。

您是否知道如何使其与其他类型不同,并知道何时以一种方式处理它以及何时以第二种方式处理它?

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

【问题讨论】:

    标签: c# .net reflection properties interface


    【解决方案1】:

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

    你说你的两个类都派生自同一个接口。然后,您可以为这两种类型的类提供一个 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();
        }
    }
    

    【讨论】:

    • 谢谢。我认为用属性标记它会更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 2021-07-04
    相关资源
    最近更新 更多