質問

私は、次のインタフェースを持っています:

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
}

[OK]を、

私はこれらの警告を無視するか、私のクラスにCLSCompliant(偽)属性を追加することによって、それらをオフにすることができます。 これがなぜ起こるかしかし、私は好奇心旺盛です。 Expeciallyコンパイラはinferface自体に文句はありませんので。

これは、一般的にインターフェースを公開したり、私はちょうど禁断のキーワードを使用しなかったクラスのために発生しますか?

役に立ちましたか?

解決

これらは万が一異なるアセンブリにありますか? ITemplateItemはCLSCompliantであることを主張しないアセンブリでますか? I のそれを説明するだろうというのだと思う - ちょうどそのアセンブリCLSCompliant作り、その場合には - 。または可能性だけでも、ITemplateItem

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top