4
我有以下接口:爲什麼這個CLS不兼容?
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(假)屬性上我的課將其關閉。 但我很好奇爲什麼會發生這種情況。特別是因爲編譯器不會抱怨接口本身。
這是否發生在暴露接口的類中,或者我只是使用了禁用的關鍵字?
這就是訣竅。我認爲我的程序集會隱式地使用CLSCompliant,除非我使用奇怪的成員名稱或標記程序集/類/屬性/等。因爲不符合CLS。 – 2010-04-14 14:07:10