Por que isso não é compatível com o CLS?
-
26-09-2019 - |
Pergunta
Eu tenho as seguintes interfaces:
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();
}
Minha implementação do itemplateItem é assim:
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
}
Mas para a implementação do itemPlateCategory, o compilador me diz que minha classe não é compatível com 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,
Eu poderia simplesmente ignorar esses avisos ou desligá -los adicionando o atributo clsCompliant (false) à minha classe. Mas estou curioso para saber por que isso acontece. Expecialmente porque o compilador não reclama do próprio Infroface.
Isso acontece para as aulas que expõem interfaces em geral ou eu acabei de usar uma palavra -chave proibida?
Solução
Estes estão em diferentes montagens por acaso? É ITemplateItem
Em uma assembléia que não afirma ser clsCompliant? EU acho Isso explicaria - nesse caso, apenas faça essa montagem clsCompliant - ou possivelmente até mesmo ITemplateItem
.