Ich habe die folgenden Schnittstellen:
public interface ITemplateItem
{
int Id { get; set; }
String Name { get; set; }
String Text { get; set; }
int CategoryId { get; set; }
int Typ { get; set; }
}
public interface ITemplateCategory
{
int Id { get; set; }
String Name { get; set; }
List TemplateItems { get; set; }
void Add(ITemplateItem item);
void Remove(ITemplateItem item);
ITemplateItem CreateTemplateItem();
}
Meine Implementierung des ITemplateItem sieht so aus:
public class MyTemplateItem : ITemplateItem
{
#region ITemplateItem Member
public int Id { get; set; }
public String Name { get; set; }
public String Text { get; set; }
public int CategoryId { get; set; }
public int Typ { get; set; }
#endregion
}
Aber bei der Implementierung des ITemplateCategory sagt mir der Compiler, dass meine Klasse nicht CLS-konform ist.
public class MyTemplateCategory : ITemplateCategory
{
#region ITemplateCategory Member
public int Id { get; set; }
public String Name { get; set; }
// Warnung: Typ von TemplateItems nicht CLS-konform
public List TemplateItems { get; set; }
// Warnung: Argument nicht CLS-konform
public void Add(ITemplateItem item)
{
throw new NotImplementedException();
}
// Warnung: Argument nicht CLS-konform
public void Remove(ITemplateItem item)
{
throw new NotImplementedException();
}
// Warnung: Rückgabetyp nicht CLS-konform
public ITemplateItem CreateTemplateItem()
{
throw new NotImplementedException();
}
#endregion
}
Ok,
Ich könnte einfach diese Warnungen ignorieren oder sie ausschalten, indem ich das Attribut CLSCompliant(false) zu meiner Klasse hinzufüge. Aber ich frage mich, warum das passiert. Besonders weil der Compiler sich nicht über die Schnittstelle selbst beschwert.
Geschieht dies generell für Klassen, die Schnittstellen freigeben, oder habe ich einfach ein verbotenes Schlüsselwort verwendet?