Condividi tramite


La differenza tra membri non deve limitarsi al tipo restituito

Aggiornamento: novembre 2007

TypeName

MembersShouldDifferByMoreThanReturnType

CheckId

CA2223

Category

Microsoft.Usage

Breaking Change

Breaking

Causa

Due membri pubblici o protetti presentano firme identiche ad eccezione del tipo restituito.

Descrizione della regola

Nonostante il Common Language Runtime consenta l'utilizzo di tipi restituiti per differenziare membri altrimenti identici, questa funzionalità non è contenuta nella specifica CLS (Common Language Specification) né appartiene comunemente ai linguaggi di programmazione .NET. Quando i membri differiscono solo per il tipo restituito, gli sviluppatori e gli strumenti di sviluppo potrebbero non essere in grado di distinguerli correttamente.

Correzione di violazioni

Per correggere una violazione di questa regola, modificare la progettazione dei membri in modo che si basino in modo univoco esclusivamente sui relativi nomi e tipi di parametro oppure non esporre i membri.

Esclusione di avvisi

Non escludere un avviso da questa regola.

Esempio

Nell'esempio riportato di seguito, in MSIL (Microsoft Intermediate Language), viene illustrato un tipo che viola la regola. Si noti che questa regola non può essere violata utilizzando C# o Visual Basic .NET.

.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