Aracılığıyla paylaş


CA1024: Uygun yerlerde özellikler kullan

TürAdı

HazırBilgiyiUygunYerlerdeKullan

CheckId

CA1024

Kategori

Microsoft.Design

Bozan Değişiklik

Bozan

Sebep

Ortak veya korumalı yöntem Get ile başlayan bir isme sahiptiri bir parametre almaz ve dizi olmayan bir değer döndürür.

Kural Tanımı

Çoğu durumda, özellikler eylemleri gerçekleştiren veri ve yöntemleri temsil eder.Özelliklere alanlar gibi ulaşılır, bu durum onların kullanımını kolaylaştırır.Bu koşullardan biri varsa, bir yöntem özellik olmaya iyi bir adaydır:

  • Hiçbir bağımsız değişken almaz ve bir nesnenin durum bilgisini döndürür.

  • Bir nesnenin durumunun bir parçasını ayarlamak için tek bir bağımsız değişken kabul eder.

Özellikler alanlarmış gibi davranmalıdır; eğer yöntem yapamaz ise, bir özelliğe değiştirilmemelidir.Aşağıdaki durumlarda yöntmeler özelliklerden daha iyidir:

  • Yöntem, zaman alıcı bir işlem gerçekleştirir.Yöntem bir alanın değerini ayarlamak veya elde etmek için gerekli süreden gözle görülebilir derecede daha yavaştır.

  • Yöntem bir dönüşüm yapar.Bir alana erişim depolanan verinin dönüştürülmüş sürümünü döndürmez.

  • Getir yöntemi gözle görülür bir yan etkisi vardır.Bir alanın değerini almak herhangi bir yan etkiye neden olmaz.

  • Yürütmenin sırası önemlidir.Bir alanın değerini ayarlamak diğer işlemlerin oluşumu üzerine dayanmaz.

  • Yöntemi arka arkaya iki kez çağırmak farklı sonuçlar oluşturur.

  • Yöntem statik ancak arayan tarafından değiştirilebilir bir nesne döndürür.Bir alanın değerini alma arayan alan tarafından depolanan verileri değiştirmeye izin vermez.

  • Bu yöntem, bir dizi döndürür.

İhlallerin Düzeltilmesi

Bu kuralın bir ihlalini düzeltmek için, yöntemi bir özelliğe değiştirin.

Uyarılar Ne Zaman Bastırılmalı

Yöntem yukarıda listelenen ölçütlerden en az birini karşılıyorsa, bu kuraldan gelen uyarıyı baskılar.

Hata Ayıklayıcı'daki Denetleme Özelliği Genişletme

Programcıların bir özelliği kullanmaktan çekinmesinin bir nedeni oto-genişletmek için hata ayıklayıcı istemezler.Örneğin, bu özellik geniş bir nesnenin ayrılmasına veya P/Invoke'u çağırmaya dahil olabilir, ama gözle görünür yan etkilere gerçekten sahip olmayabilir.

Hata ayıklayıcıyı otomatik-genişleme özelliğinden DebuggerBrowsableAttribute uygulayarak önleyebilirsiniz.Aşağıdaki örnek bir örnek özelliğine uygulanan bu davranışı göstermektedir.

Imports System 
Imports System.Diagnostics 

Namespace Microsoft.Samples 

    Public Class TestClass 

        ' [...] 

        <DebuggerBrowsable(DebuggerBrowsableState.Never)> _ 
        Public ReadOnly Property LargeObject() As LargeObject 
            Get 
                ' Allocate large object 
                ' [...] 
            End Get 
        End Property 

    End Class 

End Namespace
using System; 
using System.Diagnostics; 

namespace Microsoft.Samples 
{ 
    public class TestClass 
    { 
        // [...] 

        [DebuggerBrowsable(DebuggerBrowsableState.Never)] 
        public LargeObject LargeObject 
        { 
            get 
            { 
                // Allocate large object 
                // [...] 

        }
    }
}

Örnek

Aşağıdaki örnek özelliklere dönüştürülmesi gereken birçok yöntemi ve alanlar gibi davranmadığı için dönüştürülmemesi gereken birçok yöntemi içerir.

using System;
using System.Globalization;
using System.Collections;
namespace DesignLibrary
{
   // Illustrates the behavior of rule:  
   //  UsePropertiesWhereAppropriate. 

   public class Appointment
   {
      static long nextAppointmentID;
      static double[] discountScale = {5.0, 10.0, 33.0};
      string customerName;
      long customerID;
      DateTime when;

      // Static constructor. 
      static Appointment()
      {
         // Initializes the static variable for Next appointment ID.
      }

      // This method will violate the rule, but should not be a property. 
      // This method has an observable side effect.  
      // Calling the method twice in succession creates different results. 
      public static long GetNextAvailableID()
      {
         nextAppointmentID++;
         return nextAppointmentID - 1;
      }

      // This method will violate the rule, but should not be a property. 
      // This method performs a time-consuming operation.  
      // This method returns an array. 

      public Appointment[] GetCustomerHistory()
      {
         // Connect to a database to get the customer's appointment history. 
         return LoadHistoryFromDB(customerID);
      }

      // This method will violate the rule, but should not be a property. 
      // This method is static but returns a mutable object. 
      public static double[] GetDiscountScaleForUpdate()
      {
         return discountScale;
      }

      // This method will violate the rule, but should not be a property. 
      // This method performs a conversion. 
      public string GetWeekDayString()
      {
         return DateTimeFormatInfo.CurrentInfo.GetDayName(when.DayOfWeek);
      }

      // These methods will violate the rule, and should be properties. 
      // They each set or return a piece of the current object's state. 

      public DayOfWeek GetWeekDay ()
      {
         return when.DayOfWeek;
      }

      public void  SetCustomerName (string customerName)
      {
         this.customerName = customerName;
      }
      public string GetCustomerName ()
      {
         return customerName;
      }

     public void SetCustomerID (long customerID)
      {
         this.customerID = customerID;
      }

      public long GetCustomerID ()
      {
         return customerID;
      }

      public void SetScheduleTime (DateTime when)
      {
         this.when = when;
      }

      public DateTime GetScheduleTime ()
      {
         return when;
      }

      // Time-consuming method that is called by GetCustomerHistory.
      Appointment[] LoadHistoryFromDB(long customerID)
      {
         ArrayList records = new ArrayList();
         // Load from database. 
         return (Appointment[])records.ToArray();
      }
   }
}