【发布时间】:2012-08-03 15:27:34
【问题描述】:
我想编写一个静态实用程序类,它只有一组属性,向用户公开功能
例如我可以调用:
Utils.String.GetHexString("Hello World");
或
Utils.Stream.CopyBytes(instream, outstream);
我可以把它比作最接近的东西是 System.Text.Encoding,其中有 UTF8、ASCII 等属性,所以你可以调用类似的东西:
Encoding.UTF8.GetBytes("Hello World");
或
Encoding.ASCII.GetBytes("Hello World");
问题在于,在编码中,这会调用对用户公开可用的等效对象(UTF8Encoder、ASCIIEncoder)。我想要的是仅通过 Utils 公开对象,而不显示与属性相关的对象,例如
我可以打电话:
Utils.Stream.CopyStream(instream, outstream);
但我不能打电话:
StreamUtils.CopyStream(instr, outstr) //This class is only accessible via the Utils class!
这是否可能,如果可以,这样做是好还是坏?
【问题讨论】:
-
如果它是您自己的库,您可以在您的方法中使用
internal范围,因此只有在程序集中您才能访问那些较低级别的成员。如果您需要在库中的其他程序集中公开它,请使用[InternalsVisibleTo]属性。在你想向图书馆的消费者公开的接口上使用public,在你不想公开的接口上使用internal。 -
嗨,克里斯,感谢您的建议。我将研究 InternalVisible 属性,因为我以前没有使用过它,但它可能是我的王牌!
标签: c# .net properties utilities scoping