Aracılığıyla paylaş


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

TürAdı

GenericMethodsShouldProvideTypeParameter

CheckId

CA1004

Kategori

Microsoft.Design

Bozan Değişiklik

Bozan

Sebep

Dışarıdan gözle görünür genel bir yöntemin parametre imzası, yöntemin tüm tür parametrelerine karşılık gelmeyen türleri içermez.

Kural Tanımı

Tip argümanının açıkca özelleştirilmesi yerine yöntemi geçen argüman tipiyle tanımlanan genel yöntemin nasıl tip argümanı olduğunun sonucudur.Bir genel yöntem parametre imzası kesmesini etkinleştirmek için yöntem türü parametresi ile aynı türde bir parametre eklemeniz gerekir.Bu durumda, tip argümanının özelleştirlmesine gerek yoktur.Tüm tür parametreleri için arayüz kullandığınızda, genel ve genel olmayan örnek yöntemleri aramak için sözdizimi aynıdır.Bu, genel yöntemlerin kullanılabilirliği kolaylaştırır.

İhlallerin Düzeltilmesi

Bu kuraldan gelen bir ihlali düzeltmek için, tasarımı değiştirin, böylece parametre imzası yöntemin her tür parametresi için aynı türü içerir.

Uyarılar Ne Zaman Bastırılmalı

Bu kuraldan bir uyarı gizlemeyin.Genel üyeleri anlaması ve kullanımı kolay bir sözdizimi içinde sağlamak öğrenmek için gereken zamanı azaltıp yeni kitaplıkların kullanılma oranını arttırır.

Örnek

Aşağıdaki örnek, iki genel yöntemleri çağırmak için sözdizimini göstermektedir.Bu InferredTypeArgument için tür bağımsız değişkeni algılanır ve NotInferredTypeArgument tür bağımsız değişkenin açıkça belirtilmesi gerekir.

Imports System

Namespace DesignLibrary

   Public Class Inference

      ' This method violates the rule. 
      Sub NotInferredTypeArgument(Of T)()

         Console.WriteLine(GetType(T))

      End Sub 

      ' This method satisfies the rule. 
      Sub InferredTypeArgument(Of T)(sameAsTypeParameter As T)

         Console.WriteLine(sameAsTypeParameter)

      End Sub 

   End Class 

   Class Test

      Shared Sub Main()

         Dim infer As New Inference()
         infer.NotInferredTypeArgument(Of Integer)()
         infer.InferredTypeArgument(3)

      End Sub 

   End Class 

End Namespace
using System;

namespace DesignLibrary
{
   public class Inference
   {
      // This method violates the rule. 
      public void NotInferredTypeArgument<T>()
      {
         Console.WriteLine(typeof(T));
      }

      // This method satisfies the rule. 
      public void InferredTypeArgument<T>(T sameAsTypeParameter)
      {
         Console.WriteLine(sameAsTypeParameter);
      }
   }

   class Test
   {
      static void Main()
      {
         Inference infer = new Inference();
         infer.NotInferredTypeArgument<int>();
         infer.InferredTypeArgument(3);
      }
   }
}

İ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

CA1003: Genel olay işleyici örnekleri kullan

CA1007: Uygun yerlerde genel türler kullanın

Ayrıca bkz.

Başvuru

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