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 strukturyC
pro třídy. - Používá se
M
pro metody. - Slouží
v
pro proměnnép
pro parametry. - Používá se
r
proref
parametry.
- Slouží
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í class
interface
struct
, 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 static
private
internal
s_
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ánaTSession
.
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.