Attribute (Anweisungen in eckigen Klammern)



  • Hallo!

    Ich stoße bei der Verwendung von c# code snipets immer wieder auf Ausdrücke die in eckigen Klammern stehen und das ganze vor Deklarationen (von Klassen bzw. Methoden).

    Wenn man etwas lange nach "eckigen Klammern c#" googlt findet man irgendwann mal den Begriff Attribut.

    Ist das was von .Net? In normalen C, C++ gibts ja sowas nicht,oder?
    Was ist das eigentlich genau, um was handelt es sich da? Sind das Preprozessor Anweisungen?

    Muss man diese Attribute verwenden, oder sind diese optional?
    Eine mir bis jetzt untergekommene Direktive ist:

    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    

    Das DLLImport scheint ja sowas wie das extern in C zu sein, also mandatory.
    Die zweite Direktive scheint irgendwie den Rückgabewert zu verändern. Was da aber genau geschieht und ob dass auch zwingend notwendig ist, ist fraglich.

    Vielleicht kann ja jemand kurz erläutern worum es sich bei diesen Attributen handelt. Wie und wann man sie verwendet bzw. verwenden muss.

    Lg THE_ONE



  • Das sind meistens Anweisungen an die Runtime wie sie eine Methode/Klasse/Eigenschaft/Feld/whatever behandeln sollen. Manche Attribute werden auch vom Compliler ausgewertet (z.B. ConditionalAttribute).



  • Was z.b. machen die vielen Attribute hier?
    Für was sind diese notwendig? Ein enum kann man auch einfacher erstellen.

    [TypeConverter(typeof(EnumTypeConverter))]
      [Editor(typeof(EnumTypeEditor), typeof(UITypeEditor))]
      [Flags]
      public enum Days
      {
        [EnumItem("Not Selected", true, "Event will not reoccure.")]
        None = 0,
    
        [EnumItem("Monday", true, "Day of the Moon.")]
        Mon = 1,
    
        [EnumItem("Tuesday", true, "Day of Mars.")]
        Tue = 2,
    
        [EnumItem("Wednesday", true, "Day of Mercury.")]
        Wed = 4,
    
        [EnumItem("Thursday", true, "Day of Jupiter.")]
        Thr = 8,
    
        [EnumItem("Friday", true, "Venus's day.")]
        Fri = 16,
    
        [EnumItem("Saturday", false, "Day of Saturn.")]  // hide this one, just for the sake of it
        Sat = 32,
    
        [EnumItem("Sunday", false, "Day of the sun.")]   // hide this one, just for the sake of it
        Sun = 64,
    
        [EnumItem("Weekdays", true, "All days except Saturday and Sunday.")]
        Work = Days.Mon | Days.Tue | Days.Wed | Days.Thr | Days.Fri,
    
        [EnumItem("Weekend", true, "Only Saturday and Sunday.")]
        NoWork = Days.Sat | Days.Sun,
    
      }
    

    Irgendwie habe ich noch nicht gechecked was ich mit diesen Attributen anfangen soll.



  • Häufig werden Attribute zur Entwurfszeit oder Entwicklungsreporter gebraucht also in der Visual Studio IDE, wenn man ein Fenster desgined (?).

    In deinem Besipiel beinhalten diese Attribute Angaben womit (EnumTypeEditor) und wie (EnumItem-Parameter) diese Enumeration in dem PropertyGrid (Eigenschaftenfenster) angezeigt wird.

    EDIT: Rechtschreibung


Anmelden zum Antworten