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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top