ser*_*0ne 0 .net c# utilities properties scoping
我想编写一个静态实用程序类,它只有一组属性,向用户公开功能
例如我可以打电话:
Utils.String.GetHexString("Hello World");
Run Code Online (Sandbox Code Playgroud)
要么
Utils.Stream.CopyBytes(instream, outstream);
Run Code Online (Sandbox Code Playgroud)
我可以把它比作最接近的是System.Text.Encoding,其中有UTF8,ASCII等属性,所以你可以这样调用:
Encoding.UTF8.GetBytes("Hello World");
Run Code Online (Sandbox Code Playgroud)
要么
Encoding.ASCII.GetBytes("Hello World");
Run Code Online (Sandbox Code Playgroud)
问题是在Encoding中,这会调用用户公开可用的等效对象(UTF8Encoder,ASCIIEncoder).我想要的是仅通过Utils公开对象,而不会看到与属性相关的对象,例如
我可以打电话:
Utils.Stream.CopyStream(instream, outstream);
Run Code Online (Sandbox Code Playgroud)
但我不能打电话:
StreamUtils.CopyStream(instr, outstr) //This class is only accessible via the Utils class!
Run Code Online (Sandbox Code Playgroud)
这是可能的,如果是这样的话,这样做是好还是坏?
这是一个想法:
public interface IStreamUtil
{
void CopyStream(Stream int, Stream out);
}
internal class StreamUtil : IStreamUtil
{
// Implementation
}
public static class Util
{
private static IStreamUtil stream = new StreamUtil();
public static IStreamUtil Stream
{
get { return stream; }
}
}
Run Code Online (Sandbox Code Playgroud)
然而,对我来说,这有点奇怪.我个人更喜欢实用功能的扩展方法:
inStream.CopyStreamTo(outStream);
myString.GetHexString();
Run Code Online (Sandbox Code Playgroud)
这也可以被认为是不好的,特别是考虑到扩展方法发现和解析算法.好的ol' StreamUtil.Copy()对大多数情况来说都很好.