Delen via


Ontwerpregels

Ontwerpregels ondersteunen naleving van de ontwerprichtlijnen van .NET Framework.

In deze sectie

Regel Beschrijving
CA1000: Geen statische leden declareren voor algemene typen Wanneer een statisch lid van een algemeen type wordt aangeroepen, moet het typeargument worden opgegeven voor het type. Wanneer een algemeen exemplaarlid dat geen ondersteuning biedt voor deductie wordt aangeroepen, moet het typeargument worden opgegeven voor het lid. In deze twee gevallen is de syntaxis voor het opgeven van het typeargument anders en gemakkelijk te verwarren.
CA1001: Typen die eigen wegwerpvelden moeten wegwerpbaar zijn Een klasse declareert en implementeert een exemplaarveld dat een System.IDisposable-type is en de klasse implementeert IDisposable niet. Een klasse die een IDisposable-veld declareert, is indirect eigenaar van een onbeheerde resource en moet de IDisposable-interface implementeren.
CA1002: algemene lijsten niet beschikbaar maken System.Collections.Generic.List<(Of <(T>)>) is een algemene verzameling die is ontworpen voor prestaties, niet overname. Daarom bevat List geen virtuele leden. De algemene verzamelingen die zijn ontworpen voor overname, moeten in plaats daarvan worden weergegeven.
CA1003: Algemene gebeurtenis-handler-exemplaren gebruiken Een type bevat een gemachtigde die ongeldigheid retourneert, waarvan de handtekening twee parameters bevat (het eerste een object en het tweede een type dat kan worden toegewezen aan EventArgs) en de bijbehorende assemblydoelen .NET Framework 2.0.
CA1005: Vermijd overmatige parameters voor algemene typen Hoe meer typeparameters een algemeen type bevat, hoe moeilijker het is om te weten en te onthouden wat elke typeparameter vertegenwoordigt. Het is meestal duidelijk met één typeparameter, zoals in List<T>, en in bepaalde gevallen met twee typeparameters, zoals in Dictionary<TKey, TValue>. Als er echter meer dan twee typeparameters bestaan, wordt de moeilijkheid te groot voor de meeste gebruikers.
CA1008: Enums moet een nulwaarde hebben De standaardwaarde van een niet-geïnitialiseerde opsomming, net als andere waardetypen, is nul. Een niet-flags toegeschreven opsomming moet een lid definiëren met behulp van de waarde nul, zodat de standaardwaarde een geldige waarde van de opsomming is. Als een opsomming waarop het kenmerk FlagsAttribute is toegepast een lid met nulwaarden definieert, moet de naam 'Geen' zijn om aan te geven dat er geen waarden zijn ingesteld in de opsomming.
CA1010: Verzamelingen moeten algemene interface implementeren Als u de bruikbaarheid van een verzameling wilt uitbreiden, implementeert u een van de algemene verzamelingsinterfaces. Vervolgens kan de verzameling worden gebruikt om algemene verzamelingstypen te vullen.
CA1012: Abstracte typen mogen geen openbare constructors hebben Constructors voor abstracte typen kunnen alleen worden aangeroepen door afgeleide typen. Omdat openbare constructors exemplaren van een type maken en u geen exemplaren van een abstract type kunt maken, is een abstract type met een openbare constructor onjuist ontworpen.
CA1014: Assembly's markeren met CLSCompliantAttribute De Common Language Specification (CLS) definieert naamgevingsbeperkingen, gegevenstypen en regels waaraan assembly's moeten voldoen als ze in programmeertalen worden gebruikt. Een goed ontwerp bepaalt dat alle assembly's expliciet cls-naleving aangeven met behulp van CLSCompliantAttribute. Als dit kenmerk niet aanwezig is in een assembly, is de assembly niet compatibel.
CA1016: Assembly's markeren met AssemblyVersionAttribute .NET gebruikt het versienummer om een assembly uniek te identificeren en om verbinding te maken met typen in sterk benoemde assembly's. Het versienummer wordt samen met versie- en uitgeversbeleid gebruikt. Toepassingen worden standaard alleen uitgevoerd met de assemblyversie waarmee ze zijn gebouwd.
CA1017: Assembly's markeren met ComVisibleAttribute ComVisibleAttribute bepaalt hoe COM-clients toegang krijgen tot beheerde code. Goed ontwerp bepaalt dat assembly's expliciet com-zichtbaarheid aangeven. COM-zichtbaarheid kan worden ingesteld voor de hele assembly en vervolgens worden overschreven voor afzonderlijke typen en typeleden. Als dit kenmerk niet aanwezig is, is de inhoud van de assembly zichtbaar voor COM-clients.
CA1018: Kenmerken markeren met AttributeUsageAttribute Wanneer u een aangepast kenmerk definieert, markeert u het met attributeUsageAttribute om aan te geven waar in de broncode het aangepaste kenmerk kan worden toegepast. De betekenis en het beoogde gebruik van een kenmerk bepalen de geldige locaties in code.
CA1019: Accessors definiëren voor kenmerkargumenten Kenmerken kunnen verplichte argumenten definiëren die moeten worden opgegeven wanneer u het kenmerk toepast op een doel. Deze worden ook wel positionele argumenten genoemd, omdat ze worden geleverd aan kenmerkconstructors als positionele parameters. Voor elk verplicht argument moet het kenmerk ook een bijbehorende alleen-lezen-eigenschap opgeven, zodat de waarde van het argument tijdens de uitvoering kan worden opgehaald. Kenmerken kunnen ook optionele argumenten definiëren, die ook wel benoemde argumenten worden genoemd. Deze argumenten worden op naam opgegeven voor kenmerkconstructors en moeten een bijbehorende eigenschap lezen/schrijven hebben.
CA1021: Parameters vermijden Het doorgeven van typen per verwijzing (met behulp van out of ref) vereist ervaring met aanwijzers, inzicht in de verschillen tussen waardetypen en verwijzingstypen en het verwerken van methoden met meerdere retourwaarden. Het verschil tussen out- en refparameters wordt ook niet algemeen begrepen.
CA1024: Eigenschappen gebruiken waar van toepassing Een openbare of beveiligde methode heeft een naam die begint met Get, heeft geen parameters en retourneert een waarde die geen matrix is. De methode kan een goede kandidaat zijn om een eigenschap te worden.
CA1027: Opsommingen markeren met FlagsAttribute Een opsomming is een waardetype dat een set gerelateerde benoemde constanten definieert. Pas FlagsAttribute toe op een opsomming wanneer de benoemde constanten zinvol kunnen worden gecombineerd.
CA1028: Enum-opslag moet Int32 zijn Een opsomming is een waardetype dat een set gerelateerde benoemde constanten definieert. Standaard wordt het gegevenstype System.Int32 gebruikt om de constante waarde op te slaan. Hoewel u dit onderliggende type kunt wijzigen, is dit niet vereist of aanbevolen voor de meeste scenario's.
CA1030: Gebruik waar nodig gebeurtenissen Deze regel detecteert methoden met namen die normaal gesproken worden gebruikt voor gebeurtenissen. Als een methode wordt aangeroepen als reactie op een duidelijk gedefinieerde statuswijziging, moet de methode worden aangeroepen door een gebeurtenis-handler. Objecten die de methode aanroepen, moeten gebeurtenissen genereren in plaats van de methode rechtstreeks aan te roepen.
CA1031: Algemene uitzonderingstypen niet vangen Algemene uitzonderingen mogen niet worden betrapt. Een specifiekere uitzondering vangen of de algemene uitzondering opnieuw afwerpen als de laatste instructie in het catch-blok.
CA1032: Standaard uitzonderingsconstructors implementeren Als u de volledige set constructors niet opgeeft, kan het lastig zijn om uitzonderingen correct af te handelen.
CA1033: Interfacemethoden moeten kunnen worden aangeroepen door onderliggende typen Een niet-verzegeld extern zichtbaar type biedt een expliciete methode-implementatie van een openbare interface en biedt geen alternatieve extern zichtbare methode met dezelfde naam.
CA1034: Geneste typen mogen niet zichtbaar zijn Een genest type is een type dat wordt gedeclareerd in het bereik van een ander type. Geneste typen zijn handig om details van de privé-implementatie van het type in te kapselen. Voor dit doel mogen geneste typen niet extern zichtbaar zijn.
CA1036: Methoden overschrijven voor vergelijkbare typen Een openbaar of beveiligd type implementeert de System.IComparable-interface. Object.Equals wordt niet overschreven en de taalspecifieke operator voor gelijkheid, ongelijkheid, kleiner dan of groter dan.
CA1040: Lege interfaces vermijden Interfaces definiëren leden die een gedrag of gebruikscontract bieden. De functionaliteit die door de interface wordt beschreven, kan worden gebruikt door elk type, ongeacht waar het type wordt weergegeven in de overnamehiërarchie. Een type implementeert een interface door implementaties te bieden voor de leden van de interface. Een lege interface definieert geen leden; daarom definieert het geen contract dat kan worden geïmplementeerd.
CA1041: Message ObsoleteAttribute opgeven Een type of lid wordt gemarkeerd met behulp van een kenmerk System.ObsoleteAttribute waarvoor de eigenschap ObsoleteAttribute.Message niet is opgegeven. Wanneer een type of lid dat is gemarkeerd met behulp van ObsoleteAttribute wordt gecompileerd, wordt de eigenschap Message van het kenmerk weergegeven, die de gebruiker informatie geeft over het verouderde type of lid.
CA1043: Integraal of tekenreeksargument gebruiken voor indexeerfuncties Indexeerfuncties (dat wil gezegd, geïndexeerde eigenschappen) moeten integraal of tekenreekstypen voor de index gebruiken. Deze typen worden doorgaans gebruikt voor het indexeren van gegevensstructuren en vergroten de bruikbaarheid van de bibliotheek. Het gebruik van het objecttype moet worden beperkt tot gevallen waarin het specifieke integrale of tekenreekstype niet kan worden opgegeven tijdens het ontwerp.
CA1044: Eigenschappen mogen niet alleen worden geschreven Hoewel het acceptabel en vaak nodig is om een alleen-lezen eigenschap te hebben, verbieden de ontwerprichtlijnen het gebruik van alleen-schrijven-eigenschappen. Dit komt doordat een gebruiker een waarde kan instellen en vervolgens verhindert dat de gebruiker die waarde bekijkt, geen beveiliging biedt. Ook, zonder leestoegang, kan de status van gedeelde objecten niet worden bekeken, waardoor de bruikbaarheid ervan wordt beperkt.
CA1045: Geef geen typen door op verwijzing Het doorgeven van typen per verwijzing (met behulp van out of ref) vereist ervaring met aanwijzers, inzicht in de verschillen tussen waardetypen en verwijzingstypen en het verwerken van methoden met meerdere retourwaarden. Bibliotheekarchitecten die voor een algemeen publiek ontwerpen, mogen niet verwachten dat gebruikers kundig worden bij het werken met parameters voor out of ref.
CA1046: Operator voor overbelasting is niet gelijk aan verwijzingstypen Voor referentietypen is de standaard implementatie van de gelijkheidsoperator bijna altijd juist. Standaard zijn twee verwijzingen alleen gelijk als ze verwijzen naar hetzelfde object.
CA1047: Geen beveiligde leden declareren in verzegelde typen Typen declareren beveiligde leden, zodat overgenomen typen het lid kunnen openen of overschrijven. Verzegelde typen kunnen per definitie niet worden overgenomen, wat betekent dat beveiligde methoden voor verzegelde typen niet kunnen worden aangeroepen.
CA1050: Typen declareren in naamruimten Typen worden gedeclareerd in naamruimten om naamconflicten te voorkomen en als een manier om gerelateerde typen in een objecthiërarchie te organiseren.
CA1051: Niet zichtbare exemplaarvelden declareren Het primaire gebruik van een veld moet een implementatiedetails zijn. Velden moeten privé of intern zijn en moeten worden weergegeven met behulp van eigenschappen.
CA1052: Statische houdertypen moeten worden verzegeld Een openbaar of beveiligd type bevat alleen statische leden en wordt niet gedeclareerd met behulp van de verzegelde (C#) of NotInheritable (Visual Basic) modifier. Een type dat niet moet worden overgenomen, moet worden gemarkeerd met behulp van de verzegelde wijziging om te voorkomen dat het als basistype wordt gebruikt.
CA1053: Statische houdertypen mogen geen constructors hebben Een openbaar of genest openbaar type declareert alleen statische leden en heeft een openbare of beveiligde standaardconstructor. De constructor is niet nodig omdat het aanroepen van statische leden geen exemplaar van het type vereist. De overbelasting van de tekenreeks moet de URI-overbelasting (Uniform Resource Identifier) aanroepen met behulp van het tekenreeksargument voor veiligheid en beveiliging.
CA1054: URI-parameters mogen geen tekenreeksen zijn Als een methode een tekenreeksweergave van een URI gebruikt, moet er een bijbehorende overbelasting worden opgegeven die een instantie van de URI-klasse gebruikt, die deze services op een veilige en veilige manier levert.
CA1055: URI-retourwaarden mogen geen tekenreeksen zijn Bij deze regel wordt ervan uitgegaan dat de methode een URI retourneert. Een tekenreeksweergave van een URI is gevoelig voor parserings- en coderingsfouten en kan leiden tot beveiligingsproblemen. De klasse System.Uri biedt deze services op een veilige en veilige manier.
CA1056: URI-eigenschappen mogen geen tekenreeksen zijn Bij deze regel wordt ervan uitgegaan dat de eigenschap een URI vertegenwoordigt. Een tekenreeksweergave van een URI is gevoelig voor parserings- en coderingsfouten en kan leiden tot beveiligingsproblemen. De klasse System.Uri biedt deze services op een veilige en veilige manier.
CA1058: Typen mogen bepaalde basistypen niet uitbreiden Een extern zichtbaar type breidt bepaalde basistypen uit. Gebruik een van de alternatieven.
CA1060: P/Invokes verplaatsen naar de klasse NativeMethods Platformoproepmethoden, zoals methoden die zijn gemarkeerd met de System.Runtime.InteropServices.DllImportAttribute of methoden die zijn gedefinieerd met behulp van het trefwoord Declare in Visual Basic, hebben toegang tot onbeheerde code. Deze methoden moeten van de klasse NativeMethods, SafeNativeMethods of UnsafeNativeMethods zijn.
CA1061: Basisklassemethoden niet verbergen Een methode in een basistype wordt verborgen door een identieke benoemde methode in een afgeleid type, wanneer de parameterhandtekening van de afgeleide methode alleen verschilt van typen die zwakker zijn afgeleid dan de bijbehorende typen in de parameterhandtekening van de basismethode.
CA1062: Argumenten van openbare methoden valideren Alle verwijzingsargumenten die worden doorgegeven aan extern zichtbare methoden, moeten worden gecontroleerd op null.
CA1063: IDisposable correct implementeren Alle typen IDisposable moeten het verwijderingspatroon correct implementeren.
CA1064: Uitzonderingen moeten openbaar zijn Een interne uitzondering is alleen zichtbaar binnen een eigen intern bereik. Nadat de uitzondering buiten het interne bereik valt, kan alleen de basisonderzondering worden gebruikt om de uitzondering te ondervangen. Als de interne uitzondering wordt overgenomen van System.Exception, System.SystemExceptionof System.ApplicationException, beschikt de externe code niet over voldoende informatie om te weten wat er met de uitzondering moet worden uitgevoerd.
CA1065: Geen uitzonderingen genereren op onverwachte locaties Een methode die naar verwachting geen uitzonderingen genereert, genereert een uitzondering.
CA1066: IEquatable implementeren bij het overschrijven van equals Een methode voor het overschrijven Equals van een waardetype, maar wordt niet geïmplementeerd IEquatable<T>.
CA1067: Onderdrukking is gelijk aan bij het implementeren van IEquatable Een type implementeert IEquatable<T>, maar overschrijft Equals de methode niet.
CA1068: De parameters CancellationToken moeten als laatste komen Een methode heeft een CancellationToken-parameter die niet de laatste parameter is.
CA1069: Enums mogen geen dubbele waarden hebben Een opsomming heeft meerdere leden die expliciet dezelfde constante waarde hebben toegewezen.
CA1070: Gebeurtenisvelden niet declareren als virtueel Een veldachtige gebeurtenis is gedeclareerd als virtueel.