Aracılığıyla paylaş


CA1061: Taban sınıf yöntemlerini gizlemeyin

TürAdı

Taban sınıf yöntemlerini gizlemeyin

CheckId

CA1061

Kategori

Microsoft.Tasarım

Bozan Değişiklik

Bozan

Sebep

Bir türetilmiş tür, temel yöntemindekiyle aynı sayıda parametreye sahip ve de aynı isimde bir yöntem bildirir, bir veya daha fazla sayıda parametre temel yöntemdeki parametreye karşılık gelen temel türdür. Geriye kalan parametreler ise temel yöntemdekine karşılık gelen parametrelerle aynıdır.

Kural Tanımı

türetilmiş yöntemin parametre imzası, temel yöntem içindeki parametre imzasında karşılık gelen türlerden daha zayıf türetildiyse ve de başka farklılık yoksa, temel türdeki yöntem tür aynı adlandırılmış türetilmiş türdeki tarafından gizlenir.

İhlallerin Düzeltilmesi

Bu kuralı ihlal düzeltmek için kaldırma, yeniden adlandırma yöntemini veya parametre imza değiştirebilir, böylece yöntemi temel yöntemi gizlemez.

Uyarılar Ne Zaman Bastırılmalı

Bu kuraldan bir uyarı gizlemeyin.

Örnek

Aşağıdaki örnek kural ihlaline neden olan bir türü gösterir.

using System;

namespace DesignLibrary
{
   class BaseType
   {
      internal void MethodOne(string inputOne, object inputTwo)
      {
         Console.WriteLine("Base: {0}, {1}", inputOne, inputTwo);
      }

      internal void MethodTwo(string inputOne, string inputTwo)
      {
         Console.WriteLine("Base: {0}, {1}", inputOne, inputTwo);
      }
   }

   class DerivedType : BaseType
   {
      internal void MethodOne(string inputOne, string inputTwo)
      {
         Console.WriteLine("Derived: {0}, {1}", inputOne, inputTwo);
      }

      // This method violates the rule. 
      internal void MethodTwo(string inputOne, object inputTwo)
      {
         Console.WriteLine("Derived: {0}, {1}", inputOne, inputTwo);
      }
   }

   class Test
   {
      static void Main()
      {
         DerivedType derived = new DerivedType();

         // Calls DerivedType.MethodOne.
         derived.MethodOne("string1", "string2");

         // Calls BaseType.MethodOne.
         derived.MethodOne("string1", (object)"string2");

         // Both of these call DerivedType.MethodTwo.
         derived.MethodTwo("string1", "string2");
         derived.MethodTwo("string1", (object)"string2");
      }
   }
}