C#-azonosító elnevezési szabályai és konvenciók
Az azonosító az a név, amelyet egy típushoz (osztályhoz, felülethez, szerkezethez, delegáláshoz vagy számhoz), taghoz, változóhoz vagy névtérhez rendel.
Elnevezési szabályok
Az érvényes azonosítóknak követniük kell ezeket a szabályokat. A C#-fordító hibát okoz minden olyan azonosítónál, amely nem követi az alábbi szabályokat:
- Az azonosítóknak betűvel vagy aláhúzásjellel (
_
) kell kezdődniük. - Az azonosítók tartalmazhatnak Unicode betűkarakterek, tizedesjegyek, Unicode-összekötő karakterek, Karaktereket kombináló Unicode vagy Unicode formázási karaktereket. A Unicode-kategóriákról további információt a Unicode kategóriaadatbázisában talál.
A C# kulcsszavaknak megfelelő azonosítókat az @
azonosító előtagjának használatával deklarálhatja. Ez @
nem része az azonosító nevének. Például @if
deklarál egy azonosítót if
. Ezek a szó szerinti azonosítók elsősorban a más nyelveken deklarált azonosítókkal való együttműködésre használhatók.
Az érvényes azonosítók teljes definícióját a C# nyelvi specifikációjában található Azonosítók című cikkben találja.
Fontos
A C#-nyelv specifikációja csak betűkategóriákat (Lu, Ll, Lt, Lm, Lo vagy Nl), számjegyet (Nd), csatlakozást (Pc), kombinálást (Mn vagy Mc) és formázást (Cf) engedélyez. A rendszer automatikusan lecseréli a külső elemeket a következővel _
: . Ez hatással lehet bizonyos Unicode-karakterekre.
Elnevezési konvenciók
A szabályok mellett az azonosítónevekre vonatkozó konvenciók is használhatók a .NET API-kban. Ezek a konvenciók konzisztenciát biztosítanak a nevekhez, de a fordító nem kényszeríti őket. A projektekben különböző konvenciókat használhat.
A C#-programok konvenció szerint típusneveket, névtereket és minden nyilvános tagot használnak PascalCase
. A csapat emellett a dotnet/docs
.NET futtatókörnyezeti csapat kódolási stílusában elfogadott alábbi konvenciókra is alkalmaz:
A felületnevek nagybetűvel
I
kezdődnek.Az attribútumtípusok a következő szóval
Attribute
végződnek: .Az enumerálási típusok a nemflagok egyedi főnevét, a jelölők többes számú főnevét használják.
Az azonosítók nem tartalmazhatnak két egymást követő aláhúzásjelet (
_
) karaktert. Ezek a nevek a fordító által létrehozott azonosítók számára vannak fenntartva.Használjon értelmes és leíró neveket változókhoz, metódusokhoz és osztályokhoz.
Inkább az egyértelműséget, mint a rövidséget.
A PascalCase használata osztálynevekhez és metódusnevekhez.
A camelCase metódusparaméterekhez és helyi változókhoz használható.
A PascalCase használatával konstansneveket, mezőket és helyi állandókat is használhat.
A privát példány mezői aláhúzásjellel (
_
) kezdődnek, a fennmaradó szöveg pedig camelCased.A statikus mezők a .-val kezdődnek
s_
. Ez a konvenció nem az alapértelmezett Visual Studio-viselkedés, és nem is része a Keretrendszer tervezési irányelveinek, hanem szerkesztőkonfigurációban konfigurálható.Ne használjon rövidítéseket vagy rövidítéseket a nevekben, kivéve a széles körben ismert és elfogadott rövidítéseket.
Használjon értelmes és leíró névtereket, amelyek a fordított tartománynév jelölését követik.
Válassza ki a szerelvény elsődleges célját képviselő szerelvényneveket.
Kerülje az egybetűs nevek használatát, kivéve az egyszerű hurokszámlálókat. Emellett a C#-szerkezetek szintaxisát leíró szintaxis-példák gyakran az alábbi egybetűs neveket használják, amelyek megfelelnek a C#-nyelv specifikációjában használt konvenciónak. A szintaxis példái kivételt képeznek a szabály alól.
- Szerkezetekhez,
S
C
osztályokhoz használható. - Metódusokhoz használható
M
. - Változókhoz,
p
paraméterekhez használhatóv
. - Paraméterekhez
ref
használhatór
.
- Szerkezetekhez,
Tipp.
Kódstílus-elnevezési szabályokkal kikényszerítheti a nagybetűket, az előtagokat, az utótagokat és a szóelválasztókat érintő elnevezési konvenciót.
Az alábbi példákban a megjelölt elemekre vonatkozó útmutatás a külső public
hívók számára látható elemek és protected internal
elemek használatakor protected
is alkalmazható.
Pascal-eset
Pascal casing ("PascalCasing") használata, ha elnevez egy class
, interface
, , struct
vagy delegate
írja be.
public class DataService
{
}
public record PhysicalAddress(
string Street,
string City,
string StateOrProvince,
string ZipCode);
public struct ValueCoordinate
{
}
public delegate void DelegateType(string message);
Ha elnevez egy interface
nevet, használja a pascal-burkolatot a név előtagja mellett.I
Ez az előtag egyértelműen jelzi a felhasználóknak, hogy ez egy interface
.
public interface IWorkerQueue
{
}
A típusok( például mezők, tulajdonságok, események) tagjainak elnevezésekor public
használjon pascal casingot. Emellett használjon pascal burkolatot minden metódushoz és helyi függvényhez.
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;
// ...
}
}
Pozíciórekordok írásakor pascal casingot használjon a paraméterekhez, mivel azok a rekord nyilvános tulajdonságai.
public record PhysicalAddress(
string Street,
string City,
string StateOrProvince,
string ZipCode);
A pozíciórekordokkal kapcsolatos további információkért lásd a tulajdonságdefiníció pozíciószintaxisát.
Teve eset
Használjon teveházat ("camelCasing") az elnevezéshez private
vagy internal
a mezőkhöz, és az előtaggal _
együtt. Helyi változók, köztük delegált típusú példányok elnevezéséhez használjon teveházi burkolatot.
public class DataService
{
private IWorkerQueue _workerQueue;
}
Tipp.
Amikor az utasítás-kiegészítést támogató IDE-ben a fenti elnevezési konvencióknak megfelelő C#-kódot szerkeszti, a gépelés _
megjeleníti az objektum hatókörébe tartozó összes tagot.
Ha olyan mezőkkel static
dolgozik, amelyek vagy internal
azokprivate
, használja az s_
előtagot és a szál statikus használatátt_
.
public class DataService
{
private static IWorkerQueue s_workerQueue;
[ThreadStatic]
private static TimeSpan t_timeSpan;
}
Metódusparaméterek írásakor használjon teveházat.
public T SomeMethod<T>(int someNumber, bool isValid)
{
}
A C#-elnevezési konvenciókról további információt a .NET Futtatókörnyezeti csapat kódolási stílusában talál.
Típusparaméter elnevezési irányelvei
Az alábbi irányelvek az általános típusparaméterek típusparamétereire vonatkoznak. A típusparaméterek az általános vagy általános metódus argumentumainak helyőrzői. Az általános típusparaméterekről a C# programozási útmutatójában olvashat bővebben.
Adjon meg általános típusparamétereket leíró névvel, kivéve, ha egy betűnév teljesen magától értetődő, és egy leíró név nem ad értéket.
public interface ISessionChannel<TSession> { /*...*/ } public delegate TOutput Converter<TInput, TOutput>(TInput from); public class List<T> { /*...*/ }
Érdemes lehet típusparaméter-névként használni
T
az egybetűs típusparaméterrel rendelkező típusok esetében.public int IComparer<T>() { return 0; } public delegate bool Predicate<T>(T item); public struct Nullable<T> where T : struct { /*...*/ }
Végezze el az előtag leíró típusú paraméterneveket a "T" betűvel.
public interface ISessionChannel<TSession> { TSession Session { get; } }
Fontolja meg a paraméter nevében egy típusparaméterre vonatkozó korlátozások jelzését. Előfordulhat például, hogy egy paraméter meghívása
ISession
TSession
korlátozott.
A CA1715 kódelemzési szabály használatával biztosítható, hogy a típusparaméterek neve megfelelően legyen elnevezve.
További elnevezési konvenciók
Olyan példák, amelyek nem tartalmazzák az irányelvek használatát, névtér-minősítéseket használnak. Ha tudja, hogy a rendszer alapértelmezés szerint importál egy névteret egy projektben, nem kell teljes mértékben minősítenie a névtérben szereplő neveket. A minősített nevek pont (.) után törhetők fel, ha túl hosszúak egyetlen sorhoz, ahogy az alábbi példában is látható.
var currentPerformanceCounterCategory = new System.Diagnostics. PerformanceCounterCategory();
Nem kell módosítania a Visual Studio designer eszközeivel létrehozott objektumok nevét, hogy azok megfeleljenek más irányelveknek.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: