为什么我的class级不符合CLS?

这真让我感到困惑。 我已经尝试删除只读,更改名称..我在这里做错了什么?

public abstract class CatalogBase where T : class { protected readonly String DataPath; protected readonly XmlSerializer Serializer; private readonly XmlSerializerNamespaces _namespaces; protected CatalogBase(String dataPath) { DataPath = dataPath; Serializer = new XmlSerializer(typeof (T)); _namespaces = new XmlSerializerNamespaces(); _namespaces.Add(String.Empty, String.Empty); } public virtual void Write(T obj) { var streamWriter = new StreamWriter(DataPath); Serializer.Serialize(streamWriter, obj, _namespaces); streamWriter.Close(); } public abstract IDictionary Read(); } 

编辑:

警告:

警告1’Ar.ViewModel.Workspaces.MaterialCatalogBase’:基本类型’Or.Files.CatalogBase’不符合CLS C:_Center_Work_Programming_Cs \ Ar \ Ar \ ViewModel \ Workspaces \ MaterialCatalogBase.cs 9 18 Ar

EDIT2:

即使我改变了下面的类,我仍然得到错误:

 public abstract class CatalogBase where T : class { protected readonly String DataPath; protected readonly XmlSerializer Serializer; private readonly XmlSerializerNamespaces namespaces; protected CatalogBase(String dataPath) { DataPath = dataPath; Serializer = new XmlSerializer(typeof (T)); namespaces = new XmlSerializerNamespaces(); namespaces.Add(String.Empty, String.Empty); } public virtual void Write(T obj) { var streamWriter = new StreamWriter(DataPath); Serializer.Serialize(streamWriter, obj, namespaces); streamWriter.Close(); } public abstract IDictionary Read(); } 

另外,我忘了提到我出于某种原因得到两个(完全相同的错误)..?

看起来你有以下内容:

  • 程序集A声明CatalogBase 。 程序集A 标记为CLSCompliant
  • 程序集B引用程序集A.程序集B声明MaterialCatalogBase : CatalogBase 。 程序集B标记为CLSCompliant

如果是你的情况 – 那么你的CatalogBase类所在的程序集应该用CLSCompliant属性标记:

 [assembly: CLSCompliant(true)]