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