C#:如何使用CategoryAttribute.Appearance属性

C#:如何使用CategoryAttribute.Appearance属性,c#,user-controls,attributes,windows-forms-designer,C#,User Controls,Attributes,Windows Forms Designer,我读了一点有关这方面的书。在那里,我发现了一个名为的属性。那一页上写着 CategoryAttribute类定义了以下常见类别: 然后列出了一些常见的类别。例如,其中一个是。我想,太棒了!然后我可以使用[Category.Appearance]而不是[Category(“Appearance”)]!但显然我不能?试图编写它,但Intellisense不接受它,也不编译它。我是不是遗漏了什么?难道这些房产不就是为了这个吗?如果没有,它们是干什么用的?如果是,我如何使用它们 是的,我确实有正确的,使

我读了一点有关这方面的书。在那里,我发现了一个名为的属性。那一页上写着

CategoryAttribute类定义了以下常见类别:

然后列出了一些常见的类别。例如,其中一个是。我想,太棒了!然后我可以使用
[Category.Appearance]
而不是
[Category(“Appearance”)]
!但显然我不能?试图编写它,但Intellisense不接受它,也不编译它。我是不是遗漏了什么?难道这些房产不就是为了这个吗?如果没有,它们是干什么用的?如果是,我如何使用它们


是的,我确实有正确的
,使用
访问
类别属性
,因为
[类别(“任何”)]
可以工作。我只是想知道如何使用这些定义的公共类别。

静态属性是通过CategoryAttribute.Appearance访问的。但是属性系统不允许您在属性声明中调用代码,我想这就是为什么它不能为您编译的原因。您可能必须满足于[类别(“外观”)。

正如您在MSDN上看到的,它只是一个getter属性,而不是setter属性

public static CategoryAttribute Appearance { get; }
事实上,下面是使用Reflector的代码:

 public static CategoryAttribute Appearance
    {
        get
        {
            if (appearance == null)
            {
                appearance = new CategoryAttribute("Appearance");
            }
            return appearance;
        }
    }
所以这没什么用

我能看到的唯一用途是:

            foreach (CategoryAttribute attrib in prop.GetCustomAttributes(typeof(CategoryAttribute), false))
            {
                bool result = attrib.Equals(CategoryAttribute.Appearance);
            }

基本上,当使用反射查看类时,您可以轻松地检查它属于哪个类别,而无需进行字符串比较。但是你不能以你想要的方式使用它

嗯,那真是太烦人了。。。呵呵。当常数定义的属性仅在一端可用时,它有什么意义。哦,好吧。感谢您提供的信息:)也许您可以创建自己的类别类。看一看