Aracılığıyla paylaş


CA1007: Uygun yerlerde genel türler kullanın

TypeName

UseGenericsWhereAppropriate

CheckId

CA1007

Kategori

Microsoft.Design

Değişiklik kesiliyor

Bölme

Neden

Bir başvuru parametresi dışarıdan görünür bir yöntemi içeren Objectve içeren derleme hedefleri .NET Framework 2,0.

Kural Tanımı

Başvuru parametresi kullanılarak değiştirilebilir bir parametre ref (ByRef , Visual Basic) anahtar sözcüğü.Başvuru parametresi için sağlanan bağımsız değişken türü, başvuru parametresi türü eşleştirmeniz gerekir.Başvuru parametresi türden türetilmiş bir tür kullanmak için türü gerekir ilk artığını ve başvuru parametresi türündeki bir değişkene atanır.İlk başvuru parametresi türü türüne çevrim olmadan yönteme geçirilecek tüm türleri, kısıtlamaları, tabi bir generic yöntem kullanımını sağlar.

İhlalleri düzeltmek nasıl

Bu kuralı ihlal gidermek için yöntem genel yapmak ve değiştirmek Object bir tür parametresi kullanarak parametre.

Uyarıları ne zaman

Uyarı Bu kuraldan bastırmak değil.

Örnek

İçinde bulunuyorlar ve genel yöntemleri olarak uygulanan bir genel amaçlı takas yordam aşağıdaki örnekte gösterilmektedir.Dizelerin içinde bulunuyorlar yöntemine karşılaştırıldığında genel yöntem kullanarak nasıl verimli bir şekilde takas unutmayın.

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

İlgili kuralları

CA1005: Genel türlerde aşırı parametrelerden kaçının

CA1010: Koleksiyonlar genel arabirim uygulamalıdır

CA1000: Genel türlerde statik üyeleri belirtme

CA1002: Genel listeleri gösterme

CA1006: Üye imzalarında genel türleri iç içe kullanmayın

CA1004: Genel yöntemler tür parametresi sağlamalıdır

CA1003: Genel olay işleyici örnekleri kullan

Ayrıca bkz.

Başvuru

Genel Türler (C# Programlama Kılavuzu)