Pregunta

Tengo las siguientes 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();
}

Mi aplicación de la ITemplateItem se ve así:

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
}

Sin embargo, para la aplicación ITemplateCategory el compilador me dice que mi clase no es compatible con 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,

Yo sólo podía ignorar estas advertencias o apagarlos añadiendo el atributo CLSCompliant (falso) a mi clase. Pero tengo curiosidad por qué sucede esto. Expecially porque el compilador no se queja de la propia inferface.

¿Esto sucede para las clases que exponen interfaces en general o lo que acabo de utilizar una palabra clave prohibida?

¿Fue útil?

Solución

¿Son estos en diferentes montajes, por casualidad? Es ITemplateItem en una asamblea que no pretende ser CLSCompliant? I piensan que lo explica todo - en cuyo caso, basta con que el montaje CLSCompliant -. O posiblemente incluso sólo ITemplateItem

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top