Sdílet prostřednictvím


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

Identifikátor je název, který přiřadíte typu (třída, rozhraní, struktura, delegát nebo výčet), členu, proměnné nebo oboru 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áze 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ísmeno (Lu, Ll, Lt, Lm nebo Nl), číslice (Nd), připojení (Pc), kombinování (Mn nebo Mc) a formátování (Cf). Všechno mimo to je automaticky nahrazeno pomocí _. To může mít vliv na určité znaky Unicode.

Názvoslovné konvence

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# používají PascalCase pro názvy typů, obory názvů a všechny veřejné členy. Kromě toho tým dotnet/docs používá následující konvence, které jsou převzaty z stylu kódování týmu .NET Runtime:

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

  • Typy atributů končí slovem Attribute.

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

  • Identifikátory by neměly obsahovat dvě po sobě jdoucí podtržítka (_). 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, ať už polí nebo místních konstant, použijte PascalCase.

  • Privátní instance pole začínají podtržítkem (_) a zbývající text je ve formátu camelCase.

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

  • 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í.

  • Vyhněte se používání názvů s jedním písmenem, kromě jednoduchých čítačů cyklů. 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 jazyka C#. Příklady syntaxe jsou výjimkou pravidla.

    • Použijte S pro struktury, C pro třídy.
    • Pro metody použijte M.
    • Použijte v pro proměnné, p pro parametry.
    • Pro parametry ref použijte r.

Spropitné

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 vytváření názvů 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 prvky protected a protected internal, z nichž všechny mají být viditelné externím volajícím.

Případ Pascalu

Při pojmenování typu class, interface, structnebo delegate použijte PascalCase.

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ávání interfacepoužijte PascalCase a přidejte předponu I. Tato předpona jasně naznačuje spotřebitelům, že se jedná o interface.

public interface IWorkerQueue
{
}

Při pojmenovávání členů typu public, jako jsou pole, vlastnosti, a události, použijte PascalCase. Také pro všechny metody a místní funkce použijte PascalCase.

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 PascalCase, jelikož jsou veřejnými atributy záznamu.

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

Další informace o pozičních záznamech najdete v části Poziční syntax pro definici vlastnosti.

Velbloudí případ

Při pojmenování polí private nebo internal použijte camel casing ("camelCasing") a předponu _. 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;
}

Spropitné

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áci s poli static, která jsou private nebo internal, použijte předponu s_ a pro statické vlákno použijte 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 konvencemi pojmenovávání v jazyce C# najdete v dokumentu , který popisuje styl kódování 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 je uvedeno v průvodci programování v jazyce C#.

  • Do pojmenovat parametry obecného typu s popisnými názvy, ledaže by název jednoho písmena byl zcela vysvětlující a popisný název by nepřidal 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ísmena.

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

    public interface ISessionChannel<TSession>
    {
        TSession Session { get; }
    }
    
  • Zvažte označující omezení u parametru typu v názvu parametru. Například parametr omezený na ISession může být volen jako 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í pomocí direktiv, používají kvalifikace oboru názvů. Pokud víte, že se obor názvů automaticky importuje v projektu, nemusíte plně kvalifikovat 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.