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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top