接口声明该类必须具有ICollection <t>属性</t>

时间:2014-12-19 07:05:33

标签: c# interface

我喜欢创建一个接口,声明一个类必须至少有一个ICollection属性

   public interface ILinked<T> where T : class, IModel
    {
        ICollection<T> LinkedT { get; set; }
    }

但我希望实现类可以自由选择属性的实际名称。这可能吗?

2 个答案:

答案 0 :(得分:2)

这是不可能的;在C#中,如果没有声明名称,接口就无法单独定义类型和访问修饰符。

当你制定要求至少有一个属性ICollection&#39;时,可能通过定义ICollection<ICollection<object>>类型的属性来解决问题。

答案 1 :(得分:2)

在某种程度上,是的。您只需要指定您的类的哪个属性是实现接口属性的属性 - 毕竟,可能有多个具有该签名的属性,编译器需要知道在{{1时要执行的操作访问。这可以通过implementing the interface explicitly完成。

为此,C#需要一些样板代码......

someVariableOfTypeILinkedT.LinkedT

...而VB.NET在这种情况下更简洁,并允许您直接将实现映射到接口方法:

class MyClass : ILinked<MyParameter> {
    public ICollection<MyParameter> SomeArbitraryProperty { get; set; }

    ICollection<MyParameter> ILinked<MyParameter>.LinkedT
    { 
        get { return SomeArbitraryProperty; }
        set { SomeArbitraryProperty = value; }
    }
}