当前位置: 首页 > 编程语言 > C#

为什么VS元数据视图不显示显式接口实现成员分享

时间:2023-04-10 20:19:52 C#

为什么VS元数据视图不显示显式接口实现成员前几天在看C#布尔结构元数据。Boolean实现IConvertible接口。但是查看Boolean的成员,我没有看到大多数IConvertible成员。我和一些同事做了一些测试,包括创建我们自己的类,并得出结论,必须为Boolean显式实现IConvertible。问题是,为什么它们不可见?我知道这可能是一个“设计决定”,但我知道如果任何检查元数据的人都能看到它,它会增加更多价值。测试在VS2010.NET4.0中完成。原因是那些方法仅用于实现I接口,而不是用于扩展类的公共接口。我的意思是,如果你有这样的东西:publicclassMyClass:IConvertible{//implementation}实际上,你可能希望MyClass是可转换的,所以你可以将对它的引用传递给需要IConvertible的方法:publicvoidDoSomethingWithConvertible(IConvertibleconv)但您可能不希望MyClass类型的变量公开Convert方法。您根本不希望MyClass的公共接口具有该方法,然后您显式地实现了该接口。这就是这种方法的全部概念。这意味着不允许以下内容:MyClassa=newMyClass();a.转换();但是,仍然允许以下内容:MyClassa=newMyClass();((IConvertible)a).Convert();这背后的整个想法是,即使我们使用完全相同的实例,因为MyClass没有这个方法。AasIConvertible确实有这个方法。把它想象成你允许个体有分裂的人格。通常我隐式实现每个接口。但是,在非常具体的情况下,出于上述原因,我会明确实施它们。顺便说一句,谢谢你提出的好问题!因为显式的接口实现实际上隐藏了实现。元数据确实显示明确实施。你的意思是智能感知而不是元数据?我会说这是设计使然,并帮助开发人员说布尔值将接口限制为一个子集。通过限制它的推荐使用,它也变得可见,被认为是特殊用途。例如,通常不鼓励将布尔值视为特定数值,但在某些情况下,无论如何这样做都很方便。IDictinary是另一个例子。它实现IEnumerable>以迭代集合中的所有对和ICollat??ion>。因此,您可以在给定KeyValuePair的字典上调用Add,但您通常应该使用Add(K,key,TValue)尝试使用提供元数据读取访问权限的工具检查类。以ILDASM为例,您确实可以找到显式实现方法的元数据。它们是明确实施的。您可以在此处找到所有已实现的可转换项:http://msdn.microsoft.com/en-us/library/system.boolean.aspxC#学习教程就是这些:为什么VS元数据视图不显示显式接口所有的实现会员分享的内容,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: