首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FxCop CA1047 -抽象和可访问性级别

FxCop CA1047 -抽象和可访问性级别
EN

Stack Overflow用户
提问于 2013-05-31 15:28:02
回答 2查看 168关注 0票数 1

我有以下代码(要复制的示例):

代码语言:javascript
复制
public class ObjectBase<T>
{
}
public abstract class ExportBase
{
    public void ExportData<T>(string path, T data, string filename)
                where T : ObjectBase<T>
    {
        // Several verifications on data.
        // Example:
        if (data != null)
        {
            this.InnerExport(this.GetFileName<T>(path, filename), data);
        }
    }
    protected abstract void InnerExport<T>(string path, T data)
                where T : ObjectBase<T>;

    public string GetFileName<T>(string path, string filename)
    {
        // Code.
        return "TEST";
    }
}
internal sealed class XmlExport : ExportBase
{
    protected override void InnerExport<T>(string path, T data)
    {
        // Code.
    }
}

我不希望XmlExport可见(类库中的内部),也不希望继承(密封)。

在FxCop 10.0中,我获得了一个CA1047:DoNotDeclareProtectedMembersInSealedTypes

名称: (FxCopCmd) 不要以密封类型声明受保护的成员。 描述: (FxCopCmd) 密封类型不能扩展,只有当可以扩展声明类型时,受保护的成员才会有用。密封类型不应声明受保护的成员。 如何修复: (FxCopCmd) 使成员'XmlExport.InnerExport(string,T)‘私有、公共或内部( Visual中的朋友)。 信息: (FxCop) 密封类型不能扩展,只有当可以扩展声明类型时,受保护的成员才会有用。密封类型不应声明受保护的成员。

但我不能将保护改为私有:虚拟或抽象成员不能是私有的。也不公开(这里没有意义)。

我知道我可以使用SuppressMessage,但我想知道是否有更好的方法(包括修改类)。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-31 16:25:48

这似乎是由于基本的ObjectBase方法声明中的泛型约束("where : InnerExport“)触发了规则中的一个错误。你应该把违规行为当作假阳性来制止。如果您特别感兴趣,也可以在https://connect.microsoft.com/visualstudio/上报告该bug。

票数 1
EN

Stack Overflow用户

发布于 2013-05-31 15:37:16

如果只在库中使用保护,则可以将其更改为internal。但是,当您重写时,还必须将其更改为internal in XmlExport

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16860818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档