Pravidla a konvence pojmenování identifikátorů jazyka C#

Identifikátor je název, který přiřadíte k typu (třída, rozhraní, struktura, delegát nebo výčet), člen, proměnná nebo obor názvů.

Pravidla pojmenování

Platné identifikátory musí dodržovat tato pravidla. Kompilátor jazyka C# vytvoří chybu pro jakýkoli identifikátor, který nevyhovuje těmto pravidlům:

  • Identifikátory musí začínat písmenem nebo podtržítkem (_).
  • Identifikátory mohou obsahovat znaky písmen Unicode, desetinné číslice, spojovací znaky Unicode, kombinování znaků unicode nebo formátovací znaky Unicode. Další informace o kategoriích Unicode naleznete v databázi kategorií unicode.

Identifikátory, které odpovídají klíčovým slovům jazyka C#, můžete deklarovat pomocí @ předpony identifikátoru. Není @ součástí názvu identifikátoru. Například @if deklaruje identifikátor s názvem if. Tyto doslovné identifikátory jsou primárně určené pro interoperabilitu s identifikátory deklarovanými v jiných jazycích.

Úplnou definici platných identifikátorů najdete v článku Identifikátory ve specifikaci jazyka C#.

Důležité

Specifikace jazyka C# povoluje pouze písmena (Lu, Ll, Lt, Lm, Lo nebo Nl), číslice (Nd), připojení (Pc), kombinování (Mn nebo Mc) a kategorie formátování (Cf). Cokoli mimo, které je automaticky nahrazeno pomocí _. To může mít vliv na určité znaky Unicode.

Zásady vytváření názvů

Kromě pravidel se konvence pro názvy identifikátorů používají v rozhraních .NET API. Tyto konvence poskytují konzistenci pro názvy, ale kompilátor je nevynucuje. V projektech můžete používat různé konvence.

Programy jazyka C# se používají PascalCase podle konvence pro názvy typů, obory názvů a všechny veřejné členy. Kromě toho dotnet/docs tým používá následující konvence, které jsou převzaty ze stylu kódování týmu .NET Runtime:

  • Názvy rozhraní začínají velkým písmenem I.

  • Typy atributů končí slovem Attribute.

  • Typy výčtu používají pro nonflags jednotné jméno a pro příznaky v množném čísle.

  • Identifikátory by neměly obsahovat dva po sobě jdoucí podtržítka (_) znaky. Tyto názvy jsou vyhrazeny pro identifikátory generované kompilátorem.

  • Pro proměnné, metody a třídy používejte smysluplné a popisné názvy.

  • Raději srozumitelnost než stručnost.

  • Pro názvy tříd a názvy metod použijte PascalCase.

  • Pro parametry metody a místní proměnné použijte camelCase.

  • Pro názvy konstant použijte pascalCase, pole i místní konstanty.

  • Pole privátní instance začínají podtržítkem (_) a zbývající text je camelCased.

  • Statická pole začínají na s_. Tato konvence není výchozím chováním sady Visual Studio ani součástí pokynů pro návrh architektury, ale je konfigurovatelná v editorconfigu.

  • Nepoužívejte zkratky nebo zkratky v názvech, s výjimkou široce známých a přijatých zkratek.

  • Používejte smysluplné a popisné obory názvů, které následují za zápisem reverzního názvu domény.

  • Zvolte názvy sestavení, které představují primární účel sestavení.

  • Nepoužívejte názvy s jedním písmenem, s výjimkou jednoduchých čítačů smyčky. Příklady syntaxe, které popisují syntaxi konstruktorů jazyka C#, často používají následující názvy s jedním písmenem, které odpovídají konvenci použité ve specifikaci jazyka C#. Příklady syntaxe jsou výjimkou pravidla.

    • Slouží S pro struktury C pro třídy.
    • Používá se M pro metody.
    • Slouží v pro proměnné p pro parametry.
    • Používá se r pro ref parametry.

Tip

Konvence vytváření názvů, které se týkají velkých písmen, předpon, přípon a oddělovačů slov, můžete vynutit pomocí pravidel pojmenování ve stylu kódu.

V následujících příkladech jsou pokyny týkající se prvků označených public také použitelné při práci s protected prvky a protected internal prvky, z nichž všechny mají být viditelné pro externí volající.

Případ Pascalu

Při pojmenování classinterfacestruct, nebo delegate typu použijte casing pascalu ("PascalCasing").

public class DataService
{
}
public record PhysicalAddress(
    string Street,
    string City,
    string StateOrProvince,
    string ZipCode);
public struct ValueCoordinate
{
}
public delegate void DelegateType(string message);

Při pojmenování interface, použít pascal casing kromě předpony názvu s příponou I. Tato předpona jasně značí spotřebitele, že se jedná o .interface

public interface IWorkerQueue
{
}

Při pojmenování public členů typů, jako jsou pole, vlastnosti, události, použijte velikost písma pascal. Pro všechny metody a místní funkce použijte také casing pascalu.

public class ExampleEvents
{
    // A public field, these should be used sparingly
    public bool IsValid;

    // An init-only property
    public IWorkerQueue WorkerQueue { get; init; }

    // An event
    public event Action EventProcessing;

    // Method
    public void StartEventProcessing()
    {
        // Local function
        static int CountQueueItems() => WorkerQueue.Count;
        // ...
    }
}

Při psaní pozičních záznamů používejte pro parametry casing pascal, protože se jedná o veřejné vlastnosti záznamu.

public record PhysicalAddress(
    string Street,
    string City,
    string StateOrProvince,
    string ZipCode);

Další informace o pozičních záznamech naleznete v tématu Positional syntaxe definice vlastnosti.

Velbloudí případ

Použití camel casing ("camelCasing") při pojmenování private nebo internal polích a jejich předpony ._ Při pojmenování místních proměnných, včetně instancí typu delegáta, použijte camel casing.

public class DataService
{
    private IWorkerQueue _workerQueue;
}

Tip

Při úpravách kódu jazyka C#, který se řídí těmito konvencemi vytváření názvů v integrovaném vývojovém prostředí, které podporuje dokončování příkazů, se při psaní _ zobrazí všechny členy s oborem objektu.

Při prácisch staticprivateinternals_t_

public class DataService
{
    private static IWorkerQueue s_workerQueue;

    [ThreadStatic]
    private static TimeSpan t_timeSpan;
}

Při psaní parametrů metody použijte camel casing.

public T SomeMethod<T>(int someNumber, bool isValid)
{
}

Další informace o konvencích vytváření názvů jazyka C# najdete v programovacím stylu týmu .NET Runtime.

Pokyny pro pojmenování parametrů typů

Následující pokyny platí pro parametry typu pro parametry obecného typu. Parametry typu jsou zástupné symboly argumentů obecného typu nebo obecné metody. Další informace o parametrech obecného typu najdete v průvodci programováním v jazyce C#.

  • Pojmenovávejte parametry obecného typu s popisnými názvy, pokud není název jednoho písmena zcela vysvětlující a popisný název by nepřidá hodnotu.

    public interface ISessionChannel<TSession> { /*...*/ }
    public delegate TOutput Converter<TInput, TOutput>(TInput from);
    public class List<T> { /*...*/ }
    
  • Zvažte použití T jako názvu parametru typu pro typy s jedním parametrem typu písmene.

    public int IComparer<T>() { return 0; }
    public delegate bool Predicate<T>(T item);
    public struct Nullable<T> where T : struct { /*...*/ }
    
  • Zadejte předponu popisných názvů parametrů typu s písmenem T.

    public interface ISessionChannel<TSession>
    {
        TSession Session { get; }
    }
    
  • Zvažte označení omezení u parametru typu v názvu parametru. Například parametr omezený na ISession může být volána TSession.

Pravidlo analýzy kódu CA1715 lze použít k zajištění správného pojmenování parametrů typu.

Další zásady vytváření názvů

  • Příklady, které nezahrnují direktivy using, používají kvalifikace oboru názvů. Pokud víte, že se obor názvů ve výchozím nastavení importuje v projektu, nemusíte plně opravovat názvy z daného oboru názvů. Kvalifikované názvy mohou být přerušeny za tečkou (.), pokud jsou příliš dlouhé pro jeden řádek, jak je znázorněno v následujícím příkladu.

    var currentPerformanceCounterCategory = new System.Diagnostics.
        PerformanceCounterCategory();
    
  • Názvy objektů, které byly vytvořeny pomocí nástrojů návrháře sady Visual Studio, nemusíte měnit, aby odpovídaly jiným pokynům.