我有以下代码(要复制的示例):
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,但我想知道是否有更好的方法(包括修改类)。
谢谢。
发布于 2013-05-31 16:25:48
这似乎是由于基本的ObjectBase方法声明中的泛型约束("where : InnerExport“)触发了规则中的一个错误。你应该把违规行为当作假阳性来制止。如果您特别感兴趣,也可以在https://connect.microsoft.com/visualstudio/上报告该bug。
发布于 2013-05-31 15:37:16
如果只在库中使用保护,则可以将其更改为internal。但是,当您重写时,还必须将其更改为internal in XmlExport。
https://stackoverflow.com/questions/16860818
复制相似问题