我有以下代码:
public class A
{
Dictionary<T1,T2> foo
var otherVariable;
// some other irrelevant code
}
我希望A
能够实施IDictionary<T1,T2>
或能够轻松地将A
用作Dictionary<T1,T2>
。
到目前为止,我看到两个明显的解决方案:
使用
等代码显式实现 public int Count
{
get { return foo.Count();}
}
添加A
到Dictionary<T1,T2>
的隐式转换,这对我的使用来说已经或多或少了......现在。
我不喜欢2,因为我希望A
比foo
多一点。
我显然可以做1(事实上我已经做到了)但实现IDictionary<T1,T2>
的所有方法可能有点冗长。
还有第三种方法吗?
答案 0 :(得分:1)
还有第三种方法吗?
不,没有第三种方式:如果您希望A
的实例可以像IDictionary<T1,T2>
一样使用,并且您不希望从Dictionary<T1,T2>
派生您的课程,那么你列出的两种方式就是你必须使用的方法。
[我希望]能够轻松地将
A
用作Dictionary<T1,T2>
。
只有当您的班级A
确实是字典时,才能从字典中获取内容。另一方面,如果它只有字典而不是字典,您可能想要使用转换运算符,甚至是转换的适当命名属性:
public IDictionary<T1,T2> AsDictionary => foo; // C# 6 syntax
或
public IDictionary<T1,T2> AsDictionary { get { return foo; } } // Legacy C# syntax
答案 1 :(得分:1)
我找到了另一种解决方案,一种自动化的方式来实现我想要的Visual Studio 2015。
当我将接口IInterface
添加到已经实现它的字段成员A
的类foo
时,它为我提供了通过{{1}实现IInterface
的选项}}