2016-11-21 5 views
1
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)] 
public abstract class AttBase : Attribute 
{ 
public static string Apply(object obj); 
}  
public class FooAttribute : AttBase {} 
public class BarAttribute : AttBase {} 

public class MyClass 
{ 
    [Foo] 
    [Bar] 
    public string MyProperty { get; set; } 
} 

Ich möchte den Entwickler darauf beschränken, nur jeweils eines der abgeleiteten Attribute zu verwenden. Compiler sollte zu diesem Zeitpunkt einen Kompilierungsfehler geben. Wie kann ich das erreichen? Ist es möglich?Untergeordnete Attribute für mehrfache Verwendung einschränken

+0

Soweit ich weiß, es ist nicht möglich mit a tributes. Das 'AllowMultiple = false 'ist nur für die spezifische Attributklasse definiert, so dass Sie nicht mehrere' Foo'-Attribute verwenden können, aber nicht für die komplette Vererbungsstruktur. –

Antwort

1

Die AllowMultiple = false scheint auf dem gleichen Attributtyp nur zu beeinflussen und nicht abgeleitet \ Geschwister Attribute Klassen

Wenn Ihr Zweck ist es, einige einzigartige Indikator auf die Klasse für einige Nutzung hinzufügen, definieren einfach etwas Enum statt abgeleiteten Klassen und fügen sie es als Eigenschaft für das AttBase

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)] 
public class AttBase : Attribute 
{ 
    public IndicatorType Indicator {get;set;} 
    public AttBase(IndicatorType indicator) 
    { 
     Indicator = indicator; 
    } 
} 

public enum IndicatorType 
{ 
    Foo, 
    Bar, 
} 

public class MyClass 
{ 
    [AttBase(IndicatorType.Foo)] 
    public string MyProperty { get; set; } 
} 

Wenn Ihre Absicht, die Foo oder Bar Klasse zu nehmen war, und aktivieren sie es auf der Saite, verwenden System.Type anstelle des enum

+0

Wir haben Ihre Perspektive implementiert. Vielen Dank! – Hasan

Verwandte Themen