我喜欢创建一个接口,声明一个类必须至少有一个ICollection属性
public interface ILinked<T> where T : class, IModel
{
ICollection<T> LinkedT { get; set; }
}
但我希望实现类可以自由选择属性的实际名称。这可能吗?
答案 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; }
}
}