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);
      }
   }
}

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é

Obecné typy