CA1007: Použijte obecné typy, kde je to vhodné
Zboží | Hodnota |
---|---|
RuleId | CA1007 |
Kategorie | Microsoft.Design |
Změna způsobující chybu | Narušující |
Příčina
Externě viditelná metoda obsahuje referenční parametr typu System.Objecta obsahující sestavení cíl .NET Framework 2.0.
Popis pravidla
Referenční parametr je parametr, který je upraven pomocí klíčového ref
slova (ByRef
v jazyce Visual Basic). Typ argumentu zadaný pro parametr odkazu musí přesně odpovídat typu referenčního parametru. Chcete-li použít typ odvozený z typu referenčního parametru, musí být typ nejprve přetypován a přiřazen k proměnné typu referenčního parametru. Použití obecné metody umožňuje předání všech typů, s výhradou omezení, metodě bez prvního přetypování typu na typ referenčního parametru.
Jak opravit porušení
Chcete-li opravit porušení tohoto pravidla, nastavte metodu obecnou a nahraďte Object parametr pomocí parametru typu.
Kdy potlačit upozornění
Nepotlačujte upozornění na toto pravidlo.
Příklad
Následující příklad ukazuje rutinu prohození pro obecné účely, která je implementována jako negenerické i obecné metody. Všimněte si, jak efektivně jsou řetězce prohozeny pomocí obecné metody ve srovnání s negenerickou metodou.
using System;
namespace DesignLibrary
{
public sealed class ReferenceParameters
{
private ReferenceParameters(){}
// This method violates the rule.
public static void Swap(ref object object1, ref object object2)
{
object temp = object1;
object1 = object2;
object2 = temp;
}
// This method satifies the rule.
public static void GenericSwap<T>(ref T reference1, ref T reference2)
{
T temp = reference1;
reference1 = reference2;
reference2 = temp;
}
}
class Test
{
static void Main()
{
string string1 = "Swap";
string string2 = "It";
object object1 = (object)string1;
object object2 = (object)string2;
ReferenceParameters.Swap(ref object1, ref object2);
string1 = (string)object1;
string2 = (string)object2;
Console.WriteLine("{0} {1}", string1, string2);
ReferenceParameters.GenericSwap(ref string1, ref string2);
Console.WriteLine("{0} {1}", string1, string2);
}
}
}
Související pravidla
CA1005: Vyhněte se nadbytečným parametrům na obecných typech
CA1010: Kolekce musí implementovat obecné rozhraní
CA1000: Nedeklarujte statické členy v obecných typech
CA1002: Nezveřejňujte obecné seznamy
CA1006: Nevnořujte obecné typy v signaturách členu
CA1004: Obecné metody by měly poskytnout parametr typu
CA1003: Použijte instance obecných obslužných rutin události
Viz také
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro