CA2223 : Les membres ne doivent pas différer uniquement par leur type de retourCA2223: Members should differ by more than return type

TypeNameTypeName MembersShouldDifferByMoreThanReturnTypeMembersShouldDifferByMoreThanReturnType
CheckIdCheckId CA2223CA2223
CategoryCategory Microsoft.UsageMicrosoft.Usage
Modification avec ruptureBreaking Change RuptureBreaking

CauseCause

Deux membres publics ou protégés ont des signatures qui sont identiques à l’exception du type de retour.Two public or protected members have signatures that are identical except for return type.

Description de la règleRule description

Bien que le common language runtime autorise l’utilisation de types de retour pour différencier des membres autrement identiques, cette fonctionnalité n’est pas dans le Common Language Specification, et il est une fonctionnalité courante des langages de programmation .NET.Although the common language runtime permits the use of return types to differentiate between otherwise identical members, this feature is not in the Common Language Specification, nor is it a common feature of .NET programming languages. Lorsque les membres diffèrent uniquement par le type de retour, les développeurs et les outils de développement ne peuvent pas distinguer correctement.When members differ only by return type, developers and development tools might not correctly distinguish between them.

Comment corriger les violationsHow to fix violations

Pour corriger une violation de cette règle, modifier la conception des membres afin qu’ils reposent uniquement sur leurs noms et types de paramètre, ou n’exposent pas les membres.To fix a violation of this rule, change the design of the members so that they are unique based only on their names and parameter types, or do not expose the members.

Quand supprimer les avertissementsWhen to suppress warnings

Ne supprimez aucun avertissement de cette règle.Do not suppress a warning from this rule.

ExempleExample

L’exemple suivant, en langage intermédiaire Microsoft (MSIL), illustre un type qui enfreint cette règle.The following example, in Microsoft intermediate language (MSIL), shows a type that violates this rule. Notez que cette règle ne peut pas être enfreinte en utilisant c# ou Visual Basic.Notice that this rule cannot be violated by using C# or Visual Basic.

.namespace UsageLibrary
{
  .class public auto ansi beforefieldinit ReturnTypeTest
         extends [mscorlib]System.Object
  {
    .method public hidebysig instance int32
            AMethod(int32 x) cil managed
    {
      // Code size       6 (0x6)
      .maxstack  1
      .locals init (int32 V_0)
      IL_0000:  ldc.i4.0
      IL_0001:  stloc.0
      IL_0002:  br.s       IL_0004

      IL_0004:  ldloc.0
      IL_0005:  ret
    } // end of method ReturnTypeTest::AMethod

    .method public hidebysig instance string
            AMethod(int32 x) cil managed
    {
      // Code size       10 (0xa)
      .maxstack  1
      .locals init (string V_0)
      IL_0000:  ldstr      "test"
      IL_0005:  stloc.0
      IL_0006:  br.s       IL_0008

      IL_0008:  ldloc.0
      IL_0009:  ret
    } // end of method ReturnTypeTest::AMethod

    .method public hidebysig specialname rtspecialname
            instance void  .ctor() cil managed
    {
      // Code size       7 (0x7)
      .maxstack  1
      IL_0000:  ldarg.0
      IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
      IL_0006:  ret
    } // end of method ReturnTypeTest::.ctor

  } // end of class ReturnTypeTest

} // end of namespace UsageLibrary