Megosztás a következőn keresztül:


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 Ikezdődnek.

  • Az attribútumtípusok a következő szóval Attributevé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, SC osztályokhoz használható.
    • Metódusokhoz használható M .
    • Változókhoz, p paraméterekhez használhatóv.
    • Paraméterekhez ref használhatór.

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, , structvagy 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 interfacenevet, 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 internalazokprivate, 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 ISessionTSessionkorlá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.