Pourquoi est-ce pas CLS compatible?
-
26-09-2019 - |
Question
Je les interfaces suivantes:
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<ITemplateItem> TemplateItems { get; set; }
void Add(ITemplateItem item);
void Remove(ITemplateItem item);
ITemplateItem CreateTemplateItem();
}
Ma mise en œuvre de la ITemplateItem ressemble à ceci:
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
}
Mais pour la mise en œuvre ITemplateCategory le compilateur me dit que ma classe n'est pas conforme CLS.
public class MyTemplateCategory : ITemplateCategory
{
#region ITemplateCategory Member
public int Id { get; set; }
public String Name { get; set; }
// Warning: type of TemplateItems not CLS-Compliant
public List<ITemplateItem> TemplateItems { get; set; }
// Warning: Argument not CLS-Compliant
public void Add(ITemplateItem item)
{
throw new NotImplementedException();
}
// Warning: Argument not CLS-Compliant
public void Remove(ITemplateItem item)
{
throw new NotImplementedException();
}
// Warning: Return type not CLS-Compliant
public ITemplateItem CreateTemplateItem()
{
throw new NotImplementedException();
}
#endregion
}
Ok,
Je pourrais simplement ignorer ces avertissements ou les désactiver en ajoutant l'attribut CLSCompliant (de faux) à ma classe. Mais je suis curieux de savoir pourquoi cela se produit. Expecially parce que le compilateur ne se plaint pas de l'inferface lui-même.
Est-ce que cela se produise pour les classes qui exposent les interfaces en général ou ne je viens d'utiliser un mot-clé interdit?
La solution
sont-elles dans différentes assemblées par hasard? Est-ITemplateItem
dans un ensemble qui ne prétend pas être CLSCompliant? I pense qui pourrait l'expliquer - dans ce cas, il suffit que l'ensemble CLSCompliant -. Ou peut-être même juste ITemplateItem