¿Por qué no es este CLS compatibles?
-
26-09-2019 - |
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?
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