如何隐藏接口的部分成员我想创建一个实现了ICollection的自定义集合。但我不想公开ICollection的某些成员,例如Clear方法。这个怎么做?您可以显式实现接口并隐藏实现:publicclassUrClass:ICollection{voidICollection.Clear(){...}}用户不能直接调用urClassInstance.Clear(),但可以像这样间接调用((ICollection)urClassInstance).Clear()。您可以将其清空或触发NotImplementedException,但您不能。接口成员始终是公共的……否则,该类将无法实现该接口。这就是接口成员声明中不允许使用访问修饰符的原因。有两种方法可以声明满足接口的成员:隐式和显式。隐式地,将使用具有匹配签名的任何公共成员:publicinterfaceIGuess{voidGuess();}publicclassGuy:IGuess{publicvoidGuess(){}}这是该类的“普通”成员,将反映在该类型的实例上。正如@Jaroslav指出的那样,您还可以明确指定成员满足接口定义:publicclassGuy:IGuess{voidIGuess.Guess(){}}在这种情况下,除非实例被强制转换为接口类型,否则成员不会显示。它仍然是公开的。您可能想看看ReadOnlyCollection。您可以创建一个实现ICollection的私有内部类。然后通过对该对象调用AsReadOnly返回ReadOnlyCollection的方法。或者在适合您的设计时将其子类化。最好继承这个集合而不是尝试创建自己的实现。如果您只想从您自己的集合接口中隐藏成员,您可以显式定义它们。voidICollection.Clear(){//...}明确定义的成员仅在通过此接口使用实例时可用。YourCollectioncol1=newYourCollection();col1.清除();//如果明确定义了clear,则不允许这样做ICollectioncol2=newYourCollection();col2.Clear();//这会起作用,因为col2就是ICollection确保您确实需要实施ICollection?如果您不想使用此接口中的某些方法,请不要使用它,用您想要的方法声明一个新接口。使用ICollection的全部意义在于让其他对象认为它们可以对您的对象执行任何操作,而不管它们可以对任何其他集合执行什么操作。我宁愿建议你在这里考虑“继承”的“组合”。这使您可以更好地控制向外界公开的所有内容,并具有动态绑定到实际集合的额外好处。以上就是C#学习教程:如何隐藏界面部分成员分享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
