Naamgevingsregels en conventies voor C#-id
Een identifier is de naam die u toewijst aan een type (klasse, interface, struct, delegate of enum), lid, variabele of namespace.
Naamgevingsregels
Geldige id's moeten aan deze regels voldoen. De C#-compiler genereert een fout voor elke identifier die niet aan deze regels voldoet:
- Identificatoren moeten beginnen met een letter of een underscore (
_
). - Id's kunnen Unicode-lettertekens, decimale tekens, Unicode-verbindingstekens, Unicode-combinatietekens of Unicode-opmaaktekens bevatten. Zie de Unicode-categoriedatabasevoor meer informatie over Unicode-categorieën.
U kunt id's declareren die overeenkomen met C#-trefwoorden met behulp van het @
voorvoegsel op de id. De @
maakt geen deel uit van de id-naam.
@if
declareert bijvoorbeeld een id met de naam if
. Deze exacte id's zijn voornamelijk bedoeld voor interoperabiliteit met id's die in andere talen zijn gedeclareerd.
Zie het artikel Id's in deC#-taalspecificatie voor een volledige definitie van geldige id's.
Belangrijk
De C#-taalspecificatie alleen letter (Lu, Ll, Lt, Lm of Nl), cijfer (Nd), verbinding maken (pc), combineren (Mn of Mc) en opmaakcategorieën (Cf) toestaan. Alles daarbuiten wordt automatisch vervangen door _
. Dit kan van invloed zijn op bepaalde Unicode-tekens.
Naamgevingsconventies
Naast de regels worden conventies voor id-namen gebruikt in de .NET-API's. Deze conventies bieden consistentie voor namen, maar de compiler dwingt ze niet af. U kunt verschillende conventies in uw projecten gebruiken.
C#-programma's gebruiken standaard PascalCase
voor het typen van namen, naamruimten en alle openbare leden. Daarnaast gebruikt het dotnet/docs
team de volgende conventies, die zijn afkomstig van de stijl voor coderen van het .NET Runtime-team van .
Interfacenamen beginnen met een hoofdletter
I
.Kenmerktypen eindigen met het woord
Attribute
.Enum-typen gebruiken een enkel zelfstandig naamwoord voor nonflags en een meervouds zelfstandig naamwoord voor vlaggen.
Id's mogen geen twee opeenvolgende onderstrepingstekens (
_
) bevatten. Deze namen zijn gereserveerd voor door compiler gegenereerde id's.Gebruik zinvolle en beschrijvende namen voor variabelen, methoden en klassen.
Geef de voorkeur aan duidelijkheid over kortheid.
Gebruik PascalCase voor klassenamen en methodenamen.
Gebruik camelCase voor methodeparameters en lokale variabelen.
Gebruik PascalCase voor constante namen, zowel velden als lokale constanten.
Velden van een privé-exemplaar beginnen met een onderstrepingsteken (
_
) en de resterende tekst is camelCased.Statische velden beginnen met
s_
. Deze conventie is niet het standaardgedrag van Visual Studio en maakt geen deel uit van de ontwerprichtlijnen van Framework, maar is configureerbaar in editorconfig.Vermijd het gebruik van afkortingen of acroniemen in namen, met uitzondering van algemeen bekende en geaccepteerde afkortingen.
Gebruik zinvolle en beschrijvende naamruimten die de notatie van de omgekeerde domeinnaam volgen.
Kies assembly-namen die het primaire doel van de assembly vertegenwoordigen.
Vermijd het gebruik van eenletterige namen, met uitzondering van eenvoudige lusvariabelen. Ook gebruiken syntaxisvoorbeelden die de syntaxis van C#-constructies beschrijven vaak de volgende namen met één letter die overeenkomen met de conventie die wordt gebruikt in de C#-taalspecificatie. Voorbeelden van syntaxis zijn een uitzondering op de regel.
- Gebruik
S
voor structs,C
voor klassen. - Gebruik
M
voor methoden. - Gebruik
v
voor variabelen,p
voor parameters. - Gebruik
r
voorref
parameters.
- Gebruik
Fooi
U kunt naamconventies afdwingen die betrekking hebben op hoofdlettergebruik, voorvoegsels, achtervoegsels en scheidingstekens voor woorden met behulp van naamgevingsregels in codestijl.
In de volgende voorbeelden zijn richtlijnen met betrekking tot elementen die zijn gemarkeerd public
ook van toepassing bij het werken met protected
- en protected internal
-elementen, die allemaal zichtbaar zijn voor externe bellers.
Pascal zaak
Gebruik "PascalCasing" bij het benoemen van een class
, interface
, struct
of delegate
type.
public class DataService
{
}
public record PhysicalAddress(
string Street,
string City,
string StateOrProvince,
string ZipCode);
public struct ValueCoordinate
{
}
public delegate void DelegateType(string message);
Bij het benoemen van een interface
gebruikt u PascalCasing en voorziet u de naam van een voorvoegsel I
. Dit voorvoegsel geeft consumenten duidelijk aan dat het een interface
is.
public interface IWorkerQueue
{
}
Bij het benoemen van public
leden van typen, zoals velden, eigenschappen, gebeurtenissen, gebruikt u pascal casing. Gebruik ook pascalbehuizing voor alle methoden en lokale functies.
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;
// ...
}
}
Wanneer u positionele records schrijft, gebruikt u Pascal-notatie voor parameters, omdat dit de openbare eigenschappen van het record zijn.
public record PhysicalAddress(
string Street,
string City,
string StateOrProvince,
string ZipCode);
Zie Positionele syntaxis voor eigenschapsdefinitievoor meer informatie over positionele records.
Kameel geval
Gebruik camelCasing ("camelCasing") bij het benoemen van private
- of internal
-velden en voeg _
als voorvoegsel toe. Gebruik camel case bij het benoemen van lokale variabelen, inclusief exemplaren van een gedelegeerd type.
public class DataService
{
private IWorkerQueue _workerQueue;
}
Tip
Wanneer u C#-code bewerkt die aan deze naamconventies voldoet in een IDE die codevoltooiing ondersteunt, worden alle objectgebonden leden weergegeven door _
te typen.
Wanneer u werkt met static
velden die private
of internal
zijn, gebruikt u het voorvoegsel s_
en voor het statische threadgebruik t_
.
public class DataService
{
private static IWorkerQueue s_workerQueue;
[ThreadStatic]
private static TimeSpan t_timeSpan;
}
Gebruik camelcase bij het schrijven van methodeparameters.
public T SomeMethod<T>(int someNumber, bool isValid)
{
}
Zie de coderingsstijl van het .NET Runtime-team van het .NET Runtime-teamvoor meer informatie over C#-naamconventies.
Richtlijnen voor naamgeving van typeparameters
De volgende richtlijnen zijn van toepassing op typeparameters voor algemene typeparameters. Typeparameters zijn de tijdelijke aanduidingen voor argumenten in een algemeen type of een algemene methode. Meer informatie over algemene typeparameters vindt u in de programmeerhandleiding voor C#.
Naam algemene typeparameters met beschrijvende namen gebruiken, tenzij een enkele letter volledig verklarend is en een beschrijvende naam geen waarde zou toevoegen.
public interface ISessionChannel<TSession> { /*...*/ } public delegate TOutput Converter<TInput, TOutput>(TInput from); public class List<T> { /*...*/ }
Overweeg
T
te gebruiken als de parameternaam van het type voor typen met één lettertypeparameter.public int IComparer<T>() => 0; public delegate bool Predicate<T>(T item); public struct Nullable<T> where T : struct { /*...*/ }
Gebruik beschrijvende typeparameternamen met het voorvoegsel 'T'.
public interface ISessionChannel<TSession> { TSession Session { get; } }
Overweeg de beperkingen aan te geven die voor een typeparameter zijn geplaatst in de naam van de parameter. Een parameter die is beperkt tot
ISession
kan bijvoorbeeldTSession
worden genoemd.
De codeanalyseregel CA1715- kan worden gebruikt om ervoor te zorgen dat typeparameters op de juiste manier worden benoemd.
Extra naamgevingsconventies
Voorbeelden die geen bevatten met behulp van instructies, gebruiken naamruimtekwalificaties. Als u zich ervan bewust bent dat een naamruimte standaard in een project wordt geïmporteerd, hoeft u de namen van deze naamruimte niet volledig te kwalificeren. Gekwalificeerde namen kunnen worden verbroken na een punt (.) als ze te lang zijn voor één regel, zoals wordt weergegeven in het volgende voorbeeld.
var currentPerformanceCounterCategory = new System.Diagnostics. PerformanceCounterCategory();
U hoeft niet de namen te wijzigen van objecten die zijn gemaakt met de Visual Studio Designer-hulpprogramma's om ze aan andere richtlijnen te laten voldoen.