CA2104: Salt okunur kesilebilir başvuru türleri bildirmeyin

Ürün Değer
RuleId CA2104
Kategori Microsoft.Security
Hataya neden olan değişiklik Hataya neden olmayan

Dekont

CA2104 kuralı kullanımdan kaldırıldı ve Visual Studio'nun gelecekteki bir sürümünde kaldırılacak. Bir türün gerçek değişmezliğini belirlemek için gereken karmaşık analiz nedeniyle çözümleyici olarak uygulanmaz.

Neden

Dışarıdan görünen bir tür, kesilebilir başvuru türü olan dışarıdan görünen bir salt okunur alan içerir.

Dekont

Bu kural kullanım dışı bırakıldı. Daha fazla bilgi için bkz . Kullanım dışı kurallar.

Kural açıklaması

Kesilebilir tür, örnek verileri değiştirilebilen bir türdür. System.Text.StringBuilder sınıfı, değiştirilebilir başvuru türüne bir örnektir. Sınıfın bir örneğinin değerini değiştirebilen üyeler içerir. Sabit başvuru türüne örnek olarak sınıfı verilmiştir System.String . Örneği oluşturulduktan sonra değeri hiçbir zaman değişemez.

Başvuru türü alanındaki (veya C++'daki işaretçi) salt okunur değiştirici (C#'ta salt okunur , Visual Basic'te ReadOnly ve C++'da const ) alanın başvuru türünün farklı bir örneğiyle değiştirilmesini engeller. Ancak değiştirici, alanın örnek verilerinin başvuru türü aracılığıyla değiştirilmesini engellemez.

Bu kural, aslında değişmez bir tür için istemeden bir ihlal gösterebilir. Bu durumda uyarıyı bastırmak güvenlidir.

Salt okunur dizi alanları bu kuraldan muaf tutulur, ancak bunun yerine CA2105 ihlaline neden olur: Dizi alanları salt okunur kural olmamalıdır.

İhlalleri düzeltme

Bu kuralın ihlalini düzeltmek için salt okunur değiştiriciyi kaldırın veya hataya neden olan bir değişiklik kabul edilebilirse alanı sabit bir türle değiştirin.

Uyarıların ne zaman bastırılması gerekiyor?

Alan türü sabitse, bu kuraldan gelen bir uyarıyı engellemek güvenlidir.

Örnek

Aşağıdaki örnekte, bu kuralın ihlaline neden olan bir alan bildirimi gösterilmektedir:

using System;
using System.Text;

namespace SecurityLibrary
{
    public class MutableReferenceTypes
    {
        static protected readonly StringBuilder SomeStringBuilder;

        static MutableReferenceTypes()
        {
            SomeStringBuilder = new StringBuilder();
        }
    }
}