C# Academy · Lektion

Information på kildekodeniveau (Caller-attributter)

Brug CallerMemberName, CallerFilePath og CallerLineNumber til at registrere oplysninger om kaldestedet til logning, guards og egenskabsnotifikationer.

Lektion 2 af 38 trin

Information på kildekodeniveau (Caller-attributter) er en gratis C# Academy-lektion på CoddyKit. Dette er lektion 2 af 3. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i C# Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C# Academy-kurset indeholder 3 lektioner i alt.

Hvorfor oplysninger om den kaldende

Mål: Opsaml automatisk oplysninger om kaldestedet.

  • CallerMemberName — hvem der kaldte
  • CallerFilePath — hvilken fil
  • CallerLineNumber — hvilken linje
  • Velegnet til logning, kontroller og notifikationer

Medlemsnavn til logning

CallerMemberName udfylder automatisk navnet på den kaldendes metode eller egenskab, når argumentet udelades.

using System;
using System.Runtime.CompilerServices;

public static class Log
{
  // Caller fills "member" automatically if not provided
  public static void Info(string msg, [CallerMemberName] string member = null)
  {
    Console.WriteLine("[" + (member ?? "?") + "] " + msg);
  }
}

public class Program
{
  static void DoWork() { Log.Info("started"); }

  public static void Main(string[] args)
  {
    Log.Info("app boot");
    DoWork(); // prints caller method name
  }
}

Fil- og linjeoplysninger

Tilføj CallerFilePath og CallerLineNumber for at få præcise diagnosticeringsoplysninger.

using System;
using System.Runtime.CompilerServices;

public static class Diag
{
  public static void Trace(string msg,
    [CallerFilePath] string file = null,
    [CallerLineNumber] int line = 0,
    [CallerMemberName] string member = null)
  {
    Console.WriteLine(file + ":" + line + " in " + member + " -> " + msg);
  }
}

public class Program
{
  static void Step() { Diag.Trace("stepping"); }

  public static void Main(string[] args)
  {
    Diag.Trace("start");
    Step();
  }
}

Egenskabsnotifikationer

Brug CallerMemberName i settere eller hændelseshjælpere for at undgå hårdkodede strenge.

using System;
using System.Runtime.CompilerServices;

public class Person
{
  private string _name;

  // Notify helper uses CallerMemberName so callers need not pass the property name
  void Notify([CallerMemberName] string property = null)
  {
    Console.WriteLine("Changed: " + property);
  }

  public string Name
  {
    get { return _name; }
    set { _name = value; Notify(); } // property name auto-filled
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Person p = new Person();
    p.Name = "Ada"; // prints "Changed: Name"
  }
}

Kontroller med kaldende navn

Oplysninger om den kaldende gør kontrolmeddelelser tydeligere uden manuelle strenge.

using System;
using System.Runtime.CompilerServices;

public static class Guard
{
  public static void NotNull(object x, [CallerMemberName] string caller = null)
  {
    if (x == null) throw new ArgumentNullException("value", "Null passed by " + (caller ?? "?"));
  }
}

public class Program
{
  static void Save(string path)
  {
    Guard.NotNull(path); // if null, message includes "Save"
    Console.WriteLine("Saving to " + path);
  }

  public static void Main(string[] args)
  {
    try
    {
      Save(null);
    }
    catch (Exception ex)
    {
      Console.WriteLine(ex.Message);
    }
  }
}

Tips og noter

Noter:

  • Kaldende-attributter fungerer på valgfrie parametre med standardværdier.
  • Stol ikke på nøjagtige filstier til hemmeligheder; stier kan afsløre mapper.
  • Velegnet til logning, diagnostik og hændelser ved ændring af egenskaber.

Attribut for navnet på den kaldende

Hurtigt tjek: Hvilken attribut gør det muligt for en metode at få navnet på den kaldende som standardværdi for en parameter?

Opsummering

Opsummering: Føj CallerMemberName, CallerFilePath og CallerLineNumber til valgfrie parametre for automatisk at opsamle konteksten for den kaldende.

Gratis at komme i gang

Lær C# med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
93
Lektioner
346

Ofte stillede spørgsmål

Er lektionen “Information på kildekodeniveau (Caller-attributter)” gratis?

Ja — hele teksten til “Information på kildekodeniveau (Caller-attributter)” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af C# Academy-kurset, skal du opgradere til CoddyKit PRO. C# Academy-kurset indeholder 3 lektioner i alt.

Hvad lærer jeg i “Information på kildekodeniveau (Caller-attributter)”?

Brug CallerMemberName, CallerFilePath og CallerLineNumber til at registrere oplysninger om kaldestedet til logning, guards og egenskabsnotifikationer. Du øver dig i C# Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C# Academy?

Der kræves ingen tidligere erfaring. C# Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 3.

Hvor lang tid tager lektionen “Information på kildekodeniveau (Caller-attributter)”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C# Academy-lektion?

Ja. Alle C# Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Type, MethodInfo, aktivering og brugerdefinerede attributter
  2. Information på kildekodeniveau (Caller-attributter)
  3. Scenarier med let metaprogrammering
← Tilbage til C# Academy