Udostępnij za pośrednictwem


CA1007: Używaj danych generycznych wszędzie, gdzie jest to odpowiednie

TypeName

UseGenericsWhereAppropriate

CheckId

CA1007

Kategoria

Microsoft.Design

Złamanie zmiany

Złamanie

Przyczyna

Metoda widoczne z zewnątrz zawiera parametr odwołanie typu Objecti zawierających obiekty docelowe zestawu Program .NET Framework 2,0.

Opis reguły

Parametr odniesienia jest parametr, który jest modyfikowany za pomocą ref (ByRef w Visual Basic) słowo kluczowe.Typ argumentu, który jest dostarczony dla parametru odniesienia musi dokładnie odpowiadać odwołanie typu parametru.Aby użyć typ, który pochodzi od typu parametru odniesienia, typ najpierw musi przypisana do zmiennej typu parametru odniesienia i oddanych.Użycie metody rodzajowej umożliwia wszystkich typów, z zastrzeżeniem ograniczeń, mają być przekazywane do metody bez pierwszego rzutowanie typu odwołanie typu parametru.

Jak naprawić naruszenia

Aby naprawić naruszenie tej zasady, wprowadzić metody rodzajowe i zastąpić Object parametru za pomocą parametru typu.

Kiedy do pomijania ostrzeżenia

Nie pomijaj ostrzeżenie od tej reguły.

Przykład

W poniższym przykładzie procedura ogólnego przeznaczenia swap, która jest zaimplementowany jako metody zarówno nierodzajowe, jak i rodzajowy.Należy zwrócić uwagę, jak efektywnie ciągi są zamieniane za pomocą metody rodzajowe w porównaniu do metody nierodzajowe.

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

Zasady pokrewne

CA1005: Unikaj nadużywania parametrów na typach generycznych

CA1010: Kolekcje powinny implementować interfejs generyczny

CA1000: Nie deklaruj statycznych elementów członkowskich na typach generycznych

CA1002: Nie ujawniaj list generycznych

CA1006: Nie zagnieżdżaj typów generycznych w podpisach elementu członkowskiego

CA1004: Generyczne metody powinny dostarczyć parametry typu

CA1003: Użyj wystąpień obsługi zdarzeń generycznych

Zobacz też

Informacje

Typy ogólne (Przewodnik programowania w języku C#)