我有以下接口:
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();
}我的ITemplateItem实现如下所示:
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
}但是对于ITemplateCategory实现,编译器告诉我我的类不符合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)属性来关闭它们。但我很好奇为什么会发生这种情况。特别是因为编译器不会抱怨接口本身。
一般情况下,公开接口的类会发生这种情况吗?还是我只是使用了禁止的关键字?
发布于 2010-04-14 21:56:35
它们是否碰巧在不同的程序集中?ITemplateItem是否在一个不自称是CLSCompliant的程序集中?我认为这可以解释这个问题-在这种情况下,只需将程序集设置为CLSCompliant -或者甚至可以只使用ITemplateItem。
https://stackoverflow.com/questions/2637903
复制相似问题