我正在创建一个专门的代理类来实现IList<T>和包装内部List<T>实例.
List<T>本身实现IList<T>,它声明了一个成员bool IsReadOnly,但是当我尝试从我自己的类访问该成员时,我不能因为在List<T>,IsReadOnly是私有的.
所以我的问题是; 如果接口的实现要求所有已实现的成员都是公共的,为什么List<T>要将IsReadOnly实现为私有,从而拒绝我访问它?
Meh*_*ari 25
它显式实现了接口成员.
http://msdn.microsoft.com/en-us/library/aa288461(VS.71).aspx
请注意,这不会成为接口成员private.它仍然是公开的,但只有当你通过界面查看对象时(使用强制转换).
Jar*_*Par 15
它能够做到这一点的原因是它使用显式接口实现.
bool IList<T>.IsReadOnly { get { ... } }
Run Code Online (Sandbox Code Playgroud)
该成员仍可访问,但只能通过IList<T>类型访问.
List<T> list = ...;
bool isReadOnly = ((IList<T>)list).IsReadOnly;
Run Code Online (Sandbox Code Playgroud)
实现时IList<T>,类型未承诺提供IsReadOnly值本身.相反,它被承诺在被视为时提供IsReadOnly属性IList<T>.它是否在实际类中提供它纯粹是类型作者的选择.
对于这种情况,如果List<T>,IsReadOnly真的没有意义:它总是如此false.List因此ICollection<T>,IList显式地实现(和)接口,从而使接口"私有"以供正常使用.如果你还需要访问它,你可以通过显式转换到界面:
bool result = ((ICollection<string>)yourStringList).IsReadOnly;
// Or equivalently using `IList`.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2736 次 |
| 最近记录: |