Почему эта CLS не совместима?
-
26-09-2019 - |
Вопрос
У меня есть следующие интерфейсы:
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();
}
Моя реализация элемента PALKSITEM выглядит так:
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
}
Но для ItemplateCateCategory внедрение компилятор говорит мне, что мой класс не соответствует 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
}
Хорошо,
Я мог бы просто игнорировать эти предупреждения или выключить их, добавив атрибут CLSCompliant (False) в мой класс. Но мне интересно, почему это происходит. Определенно, потому что компилятор не жалуется на сам вход.
Это происходит для классов, которые выставляют интерфейсы в целом или я просто использовал запрещенное ключевое слово?
Решение
Это в разных собраниях случайно? Является ITemplateItem
В сборке, которая не претендует на CLSCompliant? я думать это объяснило бы это - в этом случае просто сделайте эту сборку CLSCompliant - или, возможно, даже просто ITemplateItem
.