Sdílet prostřednictvím


CA1007: Pomocí generics, případně

Název_typu

UseGenericsWhereAppropriate

CheckId

CA1007

Kategorie

Microsoft.design

Změnit rozdělení

Rozdělení

Příčina

Externě viditelné metoda obsahuje odkaz na parametr typu System.Objecta obsahující cíle sestavení .NET Framework 2.0.

Popis pravidla

Odkaz na parametr je parametr, který je upraven pomocí ref (ByRef v Visual Basic) klíčové slovo.Argument typ, který je zadán parametr reference musí přesně odpovídat parametru typ odkazu.Chcete-li použít typ odvozený z typu odkazu parametr typ musíte být nádech a přiřazena proměnné parametru typ odkazu.Použít obecná metoda umožňuje všech typů, s výhradou omezení, předán metodě bez prvního obsazení typu k parametru typ odkazu.

Jak opravit porušení

Chcete-li opravit porušení tohoto pravidla, metoda obecný a nahradit Object pomocí parametru typu parametru.

Při potlačení upozornění

Nepotlačovat upozornění od tohoto pravidla.

Příklad

Následující příklad ukazuje obecný odkládací rutiny, která je implementována jako neobecné i obecné metody.Všimněte si, jak efektivně jsou řetězce vyměnit pomocí obecná metoda porovnání neobecné metody.

Imports System

Namespace DesignLibrary

   Public NotInheritable Class ReferenceParameters

      Private Sub New()
      End Sub

      ' This method violates the rule.
      Public Shared Sub Swap( _  
         ByRef object1 As Object, ByRef object2 As Object)

         Dim temp As Object = object1
         object1 = object2
         object2 = temp

      End Sub

      ' This method satifies the rule.
      Public Shared Sub GenericSwap(Of T)( _ 
         ByRef reference1 As T, ByRef reference2 As T)

         Dim temp As T = reference1
         reference1 = reference2
         reference2 = temp

      End Sub

   End Class

   Class Test

      Shared Sub Main()

         Dim string1 As String = "Swap"
         Dim string2 As String = "It"

         Dim object1 As Object = DirectCast(string1, Object)
         Dim object2 As Object = DirectCast(string2, Object)
         ReferenceParameters.Swap(object1, object2)
         string1 = DirectCast(object1, String)
         string2 = DirectCast(object2, String)
         Console.WriteLine("{0} {1}", string1, string2)

         ReferenceParameters.GenericSwap(string1, string2)
         Console.WriteLine("{0} {1}", string1, string2)

      End Sub

   End Class

End Namespace
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ích pravidel

CA1005: Vyhnout se nadměrnému parametry na obecné typy

CA1010: Kolekce by mělo provádět obecné rozhraní

CA1000: Nelze deklarovat statické členy na obecné typy

CA1002: Obecný seznamech neuvádějí.

CA1006: Nelze vnořit obecné typy v podpisech členské

CA1004: Obecné metody by měl poskytnout parametr typu

CA1003: Použít událost obecný popisovač instance

Viz také

Referenční dokumentace

Generics (Příručka programování C#)