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


Kódstílusok elnevezési szabályai

A .editorconfig fájlban megadhat elnevezési konvenciókat a .NET programozási nyelv kódelemeihez (például osztályokhoz, tulajdonságokhoz és metódusokhoz), valamint azt, hogy a fordítónak vagy az IDE-nek hogyan kell kikényszerítenie ezeket a konvenciókat. Megadhatja például, hogy a nem nagybetűs nyilvános tagokat fordítóhibaként kell kezelni, vagy hogy ha egy privát mező nem egyel kezdődik _, buildre vonatkozó figyelmeztetést kell kiadni.

Pontosabban definiálhat egy elnevezési szabályt, amely három részből áll:

  • Az a szimbólumcsoport , amelyre a szabály vonatkozik, például nyilvános tagokra vagy privát mezőkre.
  • A szabályhoz társítandó elnevezési stílus például azt jelzi, hogy a névnek nagybetűvel kell rendelkeznie, vagy aláhúzásjellel kell kezdődnie.
  • Az üzenet súlyossági szintje, ha a szimbólumcsoport kódelemei nem követik az elnevezési stílust.

Általános szintaxis

A fenti entitások – elnevezési szabály, szimbólumcsoport vagy elnevezési stílus – definiálásához állítson be egy vagy több tulajdonságot az alábbi szintaxis használatával:

<kind>.<entityName>.<propertyName> = <propertyValue>

Az adott kind entitás összes tulajdonságbeállítása, és entityName az adott entitásdefiníció.

Minden tulajdonságot csak egyszer kell beállítani, de egyes beállítások több, vesszővel elválasztott értéket is engedélyeznek.

A tulajdonságok sorrendje nem fontos.

<kind> értékek

<a kind> megadja, hogy milyen típusú entitás van definiálva – elnevezési szabály, szimbólumcsoport vagy elnevezési stílus –, és az alábbiak egyikének kell lennie:

Tulajdonság beállítása a következőhöz: Használja az <kind> értéket Példa
Elnevezési szabály dotnet_naming_rule dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion
Szimbólumcsoport dotnet_naming_symbols dotnet_naming_symbols.interface.applicable_kinds = interface
Elnevezési stílus dotnet_naming_style dotnet_naming_style.pascal_case.capitalization = pascal_case

<entityName>

<Az entityName> egy olyan leíró név, amely több tulajdonságbeállítást társít egyetlen definícióhoz. Az alábbi tulajdonságok például két szimbólumcsoport-definíciót hoznak létre, interface és typesmindegyiken két tulajdonság van beállítva.

dotnet_naming_symbols.interface.applicable_kinds = interface
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected

dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum, delegate
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected

<propertyName> és <propertyValue>

Minden entitástípus – az elnevezési szabály, a szimbólumcsoport vagy az elnevezési stílus – saját támogatott tulajdonságokkal rendelkezik, az alábbi szakaszokban leírtak szerint.

Szimbólumcsoport tulajdonságai

A szimbólumcsoportokhoz a következő tulajdonságokat állíthatja be, hogy korlátozza a csoporthoz tartozó szimbólumokat. Ha egyetlen tulajdonsághoz több értéket szeretne megadni, az értékeket vesszővel kell elválasztani.

Tulajdonság Leírás Megengedett értékek Kötelező
applicable_kinds Szimbólumtípusok az 1. csoportban * (használja ezt az értéket az összes szimbólum megadásához)
namespace
class
struct
interface
enum
property
method
field
event
delegate
parameter
type_parameter
local
local_function
Igen
applicable_accessibilities A csoport szimbólumainak akadálymentességi szintjei * (használja ezt az értéket az összes akadálymentességi szint megadásához)
public
internal vagy friend
private
protected
protected_internal vagy protected_friend
private_protected
local (metóduson belül definiált szimbólumok esetén)
Igen
required_modifiers Csak a szimbólumok egyezése az összes megadott módosítóval 2 abstract vagy must_inherit
async
const
readonly
static vagy shared3
Nem

Megjegyzések:

  1. A Tuple-tagok jelenleg nem támogatottak.applicable_kinds
  2. A szimbólumcsoport megegyezik a tulajdonság összes módosító elemével required_modifiers . Ha kihagyja ezt a tulajdonságot, az egyezéshez nincs szükség konkrét módosítókra. Ez azt jelenti, hogy a szimbólum módosítói nem befolyásolják a szabály alkalmazását.
  3. Ha a csoport rendelkezik static vagy szerepel a shared tulajdonságban, a csoport szimbólumokat is tartalmazrequired_modifiers, mert implicit módon conststatic/Shared vannak. Ha azonban nem szeretné, hogy az static elnevezési szabály a szimbólumokra vonatkozzanak const , létrehozhat egy új elnevezési szabályt egy szimbólumcsoporttal const. Az új szabály elsőbbséget élvez a szabályrend szerint.
  4. classC#-rekordokat tartalmaz.

Elnevezési stílus tulajdonságai

Az elnevezési stílus határozza meg azokat a konvenciókat, amelyeket a szabmánnyal kíván érvényesíteni. Példa:

  • Nagybetűsítés a PascalCase
  • A következővel kezdődik: m_
  • Végződés: _g
  • Szavak elkülönítése a következővel: __

Az elnevezési stílushoz a következő tulajdonságokat állíthatja be:

Tulajdonság Leírás Megengedett értékek Kötelező
capitalization A szimbólumon belüli szavak nagybetűs stílusa pascal_case
camel_case
first_word_upper
all_upper
all_lower
Igen1
required_prefix Ezekkel a karakterekkel kell kezdődnie Nem
required_suffix Ezekkel a karakterekkel kell végződnie Nem
word_separator A szimbólumon belüli szavakat el kell különíteni ezzel a karakterrel Nem

Megjegyzések:

  1. Az elnevezési stílus részeként nagybetűs stílust kell megadnia, ellenkező esetben az elnevezési stílus figyelmen kívül hagyható.

Elnevezési szabály tulajdonságai

A szabály érvénybe lépéséhez minden elnevezési szabálytulajdonság szükséges.

Tulajdonság Leírás
symbols Máshol definiált szimbólumcsoport neve; az elnevezési szabály a csoport szimbólumaira lesz alkalmazva
style A szabályhoz társítandó elnevezési stílus neve; a stílus máshol van definiálva
severity Beállítja az elnevezési szabály kényszerítési súlyosságát. Állítsa be a társított értéket az elérhető súlyossági szintek egyikére.1

Megjegyzések:

  1. Az elnevezési szabályon belüli súlyossági specifikációt csak a fejlesztési azonosítókon belül tartják tiszteletben, például a Visual Studióban. Ezt a beállítást a C# vagy a VB fordítói nem értik, ezért nem tartják tiszteletben a buildelés során. Ha az elnevezési stílusszabályokat a buildeléskor szeretné kikényszeríteni, a súlyosságot a kódszabály súlyossági konfigurációjának használatával kell beállítania. További információkért tekintse meg ezt a GitHub-problémát.

Szabályrend

Nem számít, hogy az elnevezési szabályok milyen sorrendben vannak definiálva egy EditorConfig-fájlban. Az elnevezési szabályok automatikusan a szabályok definícióinak megfelelően vannak rendezve. A hozzáférési képességekre, a módosítókra és a szimbólumokra vonatkozó pontosabb szabályok elsőbbséget élveznek a kevésbé specifikus szabályokkal szemben. Ha átfedés van a szabályok között, vagy ha a szabályrendezés problémákat okoz, a két szabály metszetét egy új szabályra bonthatja, amely elsőbbséget élvez a szélesebb szabályokkal szemben, amelyekből származik. Példák: Példa: Átfedésben lévő elnevezési stratégiák és példa: const a módosító tartalmazza static és readonly.

Feljegyzés

Ha a Visual Studio 2019-nél korábbi verzióját használja, az elnevezési szabályokat a Szerkesztőkonfiguráció fájlban a legspecifikusabbtól a legkevésbé specifikusig kell rendezni. Az első alkalmazható szabály az egyetlen alkalmazott szabály. Ha azonban több azonos nevű szabálytulajdonság is van, akkor az ezzel a névvel rendelkező legutóbb talált tulajdonság elsőbbséget élvez. További információ: Fájlhierarchia és elsőbbség.

Példa: Átfedésben lévő elnevezési stratégiák

Vegye figyelembe a következő két elnevezési szabályt:

  1. A nyilvános metódusok a PascalCase.
  2. Az aszinkron metódusok végződnek a "Async".

A metódusok esetében public async nem egyértelmű, hogy melyik szabály élvez elsőbbséget. Létrehozhat egy új szabályt a metódusokhoz public async , és pontosan megadhatja az elnevezést.

Példa: const a módosító tartalmazza static és readonly

Vegye figyelembe a következő két elnevezési szabályt:

  1. Az állandó mezők PascalCaseek.
  2. A nem nyilvános static mezők s_camelCase.

A 2. szabály pontosabb, és elsőbbséget élvez, ezért minden nem nyilvános állandó mező s_camelCase. A probléma megoldásához megadhat egy metszetszabályt: a nem nyilvános állandó mezők PascalCaseek.

Alapértelmezett elnevezési stílusok

Ha nem ad meg egyéni elnevezési szabályokat, a rendszer a következő alapértelmezett stílusokat használja:

  • Az osztályok, szerkezetek, enumerálások, tulajdonságok, metódusok és események esetében az alapértelmezett elnevezési stílus a Pascal-eset.

  • Az akadálymentességgel rendelkező felületek esetében az alapértelmezett elnevezési stílus a Pascal-eset, amelynek előtagja az I.

Kódszabály azonosítója: IDE1006 (Naming rule violation)

Minden elnevezési beállítás rendelkezik szabályazonosítóval IDE1006 és címmel Naming rule violation. Az elnevezési szabálysértések súlyosságát globálisan konfigurálhatja egy EditorConfig-fájlban az alábbi szintaxissal:

dotnet_diagnostic.IDE1006.severity = <severity value>

A súlyossági értéket a buildelés során kell warning vagy errorkell kikényszeríteni. Az összes lehetséges súlyossági értékhez tekintse meg a súlyossági szintet.

Példa: Nyilvános tagok nagybetűsítése

A következő .editorconfig fájl egy elnevezési konvenciót tartalmaz, amely meghatározza, hogy a megjelölt nyilvános tulajdonságokat, metódusokat, mezőket, eseményeket és meghatalmazottakat nagybetűvel kell megadni readonly . Ez az elnevezési konvenció több szimbólumtípust határoz meg, amelyek a szabályt vesszővel választják el egymástól.

[*.{cs,vb}]

# Defining the 'public_symbols' symbol group
dotnet_naming_symbols.public_symbols.applicable_kinds           = property,method,field,event,delegate
dotnet_naming_symbols.public_symbols.applicable_accessibilities = public
dotnet_naming_symbols.public_symbols.required_modifiers         = readonly

# Defining the 'first_word_upper_case_style' naming style
dotnet_naming_style.first_word_upper_case_style.capitalization = first_word_upper

# Defining the 'public_members_must_be_capitalized' naming rule, by setting the
# symbol group to the 'public symbols' symbol group,
dotnet_naming_rule.public_members_must_be_capitalized.symbols  = public_symbols
# setting the naming style to the 'first_word_upper_case_style' naming style,
dotnet_naming_rule.public_members_must_be_capitalized.style    = first_word_upper_case_style
# and setting the severity.
dotnet_naming_rule.public_members_must_be_capitalized.severity = suggestion

Példa: Privát példány mezői aláhúzással

Ez a .editorconfig fájlrészlet kikényszeríti, hogy a privát példány mezőinek egy _; ha nem követi ezt az egyezményt, az IDE fordítóhibaként fogja kezelni. A rendszer figyelmen kívül hagyja a privát statikus mezőket.

Mivel egy szimbólumcsoportot csak a benne szereplő azonosítók (például vagy static) alapján definiálhat, és nem azok alapján az readonly azonosítók alapján, amelyekkel nem rendelkezik (például egy példánymezővel, mert nem rendelkezikstatic), két elnevezési szabályt kell meghatároznia:

  1. Az összes magánmezőre static – vagy nem – az underscored elnevezési stílust kell alkalmazni fordítóként error.
  2. A magánmezők static esetében az underscored elnevezési stílusnak kell vonatkoznia rájuk a súlyossági szinttel none; más szóval hagyja figyelmen kívül ezt az esetet.
[*.{cs,vb}]

# Define the 'private_fields' symbol group:
dotnet_naming_symbols.private_fields.applicable_kinds = field
dotnet_naming_symbols.private_fields.applicable_accessibilities = private

# Define the 'private_static_fields' symbol group
dotnet_naming_symbols.private_static_fields.applicable_kinds = field
dotnet_naming_symbols.private_static_fields.applicable_accessibilities = private
dotnet_naming_symbols.private_static_fields.required_modifiers = static

# Define the 'underscored' naming style
dotnet_naming_style.underscored.capitalization = pascal_case
dotnet_naming_style.underscored.required_prefix = _

# Define the 'private_fields_underscored' naming rule
dotnet_naming_rule.private_fields_underscored.symbols = private_fields
dotnet_naming_rule.private_fields_underscored.style = underscored
dotnet_naming_rule.private_fields_underscored.severity = error

# Define the 'private_static_fields_none' naming rule
dotnet_naming_rule.private_static_fields_none.symbols = private_static_fields
dotnet_naming_rule.private_static_fields_none.style = underscored
dotnet_naming_rule.private_static_fields_none.severity = none

Ez a példa azt is bemutatja, hogy az entitásdefiníciók újra felhasználhatók. Az underscored elnevezési stílust az elnevezési private_fields_underscoredprivate_static_fields_none szabályok is használják.

Lásd még