我有以下代码:
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>
的所有方法可能会有点长。
还有第三条路吗?
还有第三条路吗?
不,没有第三种方法:如果您希望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
我找到了另一个解决方案,这是一种使用Visual Studio 2015实现目标的自动化方式。
当我将接口IInterface
添加到具有已经实现它的字段成员foo
的类A
时,它为我提供了实现IInterface
到foo
的选项。