据一本书我读,AllowMultipleAttributeUsage公共属性指定:

  

...目标是否可具有适用于它的属性的多个实例。

我为什么要/不希望使用此?

有帮助吗?

解决方案

的属性是元数据。通常情况下,你要装饰的成员或类型,以便一个属性来跟踪关于它的一些信息。

例如,在DescriptionAttribute用于通过PropertyGrid中标注的属性的描述:

[Description("This is my property")]
public int MyProperty { get; set; }

大多数时候,具有多于一个的描述就没有意义。

然而,可能的是,特定属性有意义的使用一次以上。在这种情况下,你要设置的属性,使标记到同一属性的本身的多个实例。

(不,我会做这个,但是......)如果你做了一个自定义属性跟踪一类的重大变化。您可能要列出此为每个重大变化:

[Changes(Version=1.1, Change="Added Foo Feature")]
[Changes(Version=2.0, Change="Added Bar Feature")]
public class MyClass
{
    // ...

其他提示

这个例子可能有点做作,但希望它得到跨越点。

[Convertable(typeof(Int32)), Convertable(typeof(Double))]
public class Test
{

}

这取决于什么属性。

例如,可以作出这样的类标记为依赖于什么属性,以及你可能会允许多个依赖关系。

有关一个具体的例子,请看 SuppressMessage ,这抑制代码分析警告。成员可以有,你可能要抑制多个警告。

又如 WebResource ;组件可包含多个资源。

这里没有人为的例子中,我使用它在实际生产代码。我写一些代码来解析包含对等(代码=值)的数据的文件。我把一个函数的自定义属性,以表明它应该被称为一个给定的代码。

[CanParseCode("G1")]
[CanParseCode("G2")]
private void ParseGXCodes(string code, string value)
{
   ...
}

此特定的格式是与特定数百个不同的代码的稍微老和域。我的目标是写一个框架,使之更容易编写文件处理器,可以只提取它需要的代码而忽略其他。允许同一属性多次使它容易通过简单地对处理每一个代码的功能(一个或多个)属性声明来表示代码的意图。

属性的AllowMultiple =真有用的真实世界的应用

[ManagesType(typeof(SPEC_SEC_OC), true)]
[ManagesType(typeof(SPEC_SEC_04_OC), true)]
public class LibSpecSelectionView : CustomView
{
    public LibSpecSelectionView(SPEC_SEC_OC)
    {}
    public LibSpecSelectionView(SPEC_SEC_O4_OC)
    {}
    ....
}

public static class ViewManager
{
   ...  static Dictionary of views built via reflection
   public void LaunchView(this CollectionBaseClass cbc)
   {
       ... Find class registered to handle cbc type in dictionary and call ctor
   }
}

SPEC_SEC_OC myOC = DataClient.Instance.GetSPEC_SEC_OC();
myOC.LaunchView()

我翻转=的AllowMultiple今天早些时候真以允许ManagesType属性被使用一次以上。我们有几百个自定义集合类。大多数这些定制藏品有来自CustomView继承设计用于处理用户界面视图的创建特定类型的自定义集合,它呈现给用户的视图。该ManagesType属性是通过反射用于构建的每个视图在我们的应用程序的字典,从CustomView继承到“注册”是什么对象类型,它被设计来处理。所述LibSpecSelectionView“打破了图案”由同时显示两个不同的集合(将产生两个选项卡并且示出了在一个选项卡一个自定义集合,另一个在第二个选项卡),所以相同的视图能够处理两种不同的自定义集合。 这本字典其中的观点能够处理该集合类型,然后通过一个扩展方法利用,让我们的任何自定义集合,通过一个行启动注册视图(或默认的,如果没有一个“注册”视图)打电话到视图管理器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top