Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

C# Attribute: Metadaten für Compiler & Runtime

Was sind Attribute?

Attribute sind deklarative Tags ([AttributeName]), die Metadaten an Code-Elemente (Klassen, Methoden, Properties, Assemblys, …) anhängen. Sie werden zur Kompilierzeit in die Assembly-Metadaten geschrieben und können zur Laufzeit via Reflection ausgewertet werden.

Syntax

[AttributeName(PositionalParam, NamedParam = Value)]
public class MyClass { ... }

Vordefinierte Attribute

1. [Obsolete] – Veraltet markieren

[Obsolete("Use NewMethod instead", true)] // true = Compiler-Error
public void OldMethod() { }

public void NewMethod() { }

Bei Aufruf von OldMethod(): Compiler-Fehler mit Nachricht.

2. [Conditional("SYMBOL")] – Bedingte Kompilierung von Methodenaufrufen

Methode wird nur aufgerufen, wenn Symbol definiert ist (sonst Aufruf + Argumente komplett entfernt).

[Conditional("DEBUG")]
public static void Log(string msg) => Console.WriteLine($"[LOG] {msg}");

// In Release-Build (ohne DEBUG) wird Log("test") komplett eliminiert.

3. [AttributeUsage] – Steuert, wo Custom-Attribute angewendet werden dürfen

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = false)]
public class MyAttribute : Attribute { }

Eigene (Custom) Attribute erstellen

  1. Klasse von System.Attribute ableiten.
  2. [AttributeUsage] anwenden.
  3. Konstruktor für positionale Parameter.
  4. Properties für benannte Parameter.

Beispiel: DebugInfo Attribute

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true)]
public class DebugInfo : Attribute
{
    public int BugNumber { get; }
    public string Developer { get; }
    public string LastReview { get; }
    public string Message { get; set; } // benannter Parameter

    public DebugInfo(int bugNo, string dev, string review)
    {
        BugNumber = bugNo; Developer = dev; LastReview = review;
    }
}

Attribute anwenden

[DebugInfo(45, "Zara Ali", "12/8/2023", Message = "Return type mismatch")]
[DebugInfo(49, "Nuha Ali", "10/10/2023", Message = "Unused variable")]
public class Rectangle
{
    public double Length { get; set; }
    public double Width { get; set; }

    [DebugInfo(55, "Zara Ali", "19/10/2023", Message = "Return type mismatch")]
    public double Area => Length * Width;
}

Attribute zur Laufzeit auslesen (Reflection)

Siehe nächstes Kapitel Reflection. Kurz:

var attrs = typeof(Rectangle).GetCustomAttributes(inherit: false);
foreach (var a in attrs) Console.WriteLine($"Bug {a.BugNumber}: {a.Message}");

C Sprache

  1. Java 8 Optional meistern: Praktischer Leitfaden für null-sicheren Code
  2. C# Nullable Types: Sicherer Umgang mit Null-Werten
  3. Ferro-Titanit® Cromoni – Hochfeste, nichtmagnetische Titanlegierung
  4. AgCu20 Legierung: Umfassende mechanische & thermische Eigenschaften bei 23 °C
  5. Legierung 15CDV6 (DIN 1.7734) – Hohe Festigkeit, Zähigkeit und leichte Schweißbarkeit
  6. DIN 1.7734 15CDV6 Legierung – Hohe Festigkeit, Zähigkeit und ausgezeichnete Schweißbarkeit
  7. 15CDV6 Legierung (DIN 1.7734) – Höchste Festigkeit, einfache Schweißbarkeit, überlegene Zähigkeit
  8. PtNi10 Legierung: Umfassende mechanische & thermische Eigenschaften
  9. PtIr10 Platin-Iridium-Legierung: Hochfestes Hochtemperatur-Material
  10. Corroplast Platte – Hochleistungs-Korrosionsbeständiger Stahl für Präzisionsbearbeitung