通过C#中的属性公开对象

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)

这是可能的,如果是这样的话,这样做是好还是坏?

Ant*_*lev 5

这是一个想法:

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()对大多数情况来说都很好.