当前位置:  开发笔记 > 编程语言 > 正文

C#CA2104 - 自动代码分析不喜欢静态只读可变类型

如何解决《C#CA2104-自动代码分析不喜欢静态只读可变类型》经验,为你挑选了1个好方法。

我有这样的代码:

public abstract class Base
{
    // is going to be used in deriving classes
    // let's assume foo is threadsafe
    protected static readonly Foo StaticFoo = new Foo();
}

Visual Studio 2008的代码分析弹出以下消息:

CA2104 : Microsoft.Security : Remove the read-only designation from 'Base.StaticFoo' or change the field to one that is an immutable reference type. If the reference type 'Foo' is, in fact, immutable, exclude this message.

我的设计是否存在本质上的缺陷,或者我可以[SuppressMessage]在源代码中添加一个?



1> Jon Skeet..:

问题在于它给出了错误的印象 - 它使得它看起来像值不能改变,而实际上它只是不能改变的字段值,而不是对象.我认为代码分析在这里过于谨慎 - 有很多地方你可能想要一个存储在只读字段中的可变类型,特别是如果它是私有的,在静态初始化程序中初始化然后从不在代码中变异.

虽然该字段受到保护,但派生类滥用它的风险更大.我个人认为我的所有领域都是私人的.另一方面,我不知道你的代码 - 可能是你已经权衡了可能性,并认为这是正确的做法.

如果Foo真的是线程安全的话,那么除了由于该字段是只读的事实给出的不可变性的一般印象之外,不用担心.我将禁用该行的警告,并添加注释以强调该对象是可变的,即使该字段是只读的.

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有