在C#中全局定义函数

时间:2012-05-30 15:37:47

标签: c# function global definition

我有两个函数,我似乎在软件中包含了相当多的类型转换字符串和字节数组。用法是这样的:

string str = "Hello world";
byte[] b = strToByteArray(str);

首先,有没有一种方法可以将它包含在System命名空间中,这样我就不用再在代码中定义它了?

其次,有没有办法将它定义为字符串类的一部分,因此用法更像是:

string str = "Hello world";
byte[] b = str.ToByteArray();

8 个答案:

答案 0 :(得分:7)

您要求的内容由C Extension Methods提供。

答案 1 :(得分:4)

为什么不使用System.Text.Encoding.Unicode.GetBytes

  

首先,有没有一种方法可以将它包含在System命名空间中,这样我就不用再在代码中定义它了?

我不知道你的意思是“再在代码中定义它”。你可以添加你想要的任何内容System,但这通常是不赞成的。只是说

namespace System {
    // add classes here
}

C#没有你想要的顶级方法。 Eric Lippert之前已经讨论过这个问题。

  

其次,有没有办法将它定义为字符串类的一部分,因此用法更像是:

我想你可以在string上定义一个扩展方法:

public static class StringExtensions {
    public static byte[] GetBytes(this string s) {
        // do something and return byte[]
    }
}

如果需要,请将其放在命名空间System中。同样,这通常是不受欢迎的,您仍然需要引用包含定义的程序集。

答案 2 :(得分:2)

请勿重新发明轮子,请改用 Encoding 类。

答案 3 :(得分:0)

  1. 没有; C#不支持顶级功能

  2. 您正在寻找扩展方法。

答案 4 :(得分:0)

您可以为字符串编写扩展方法,以满足您的需要: http://csharp.net-tutorials.com/csharp-3.0/extension-methods/

然后你可以用每个字符串调用它:

byte[] b = "Hello world".ToByteArray();

对于实现,你可以使用Encoding.GetBytes

答案 5 :(得分:0)

您需要的只是名称空间System中的自定义Extension Method

namespace System
{
    public static class StringExtensions
    {
        public static byte[] ToByteArray(this string source)
        {
            // return result
        }
    }
}

答案 6 :(得分:0)

有关其他信息,请参阅Why use the global keyword in C#? ...您可以添加using语句来实现您要查找的语义,也可以使用global关键字。

答案 7 :(得分:0)

  

首先,有没有办法可以在System命名空间中包含它,所以我不必在其中定义它   代码了吗?

???你想要什么?

系统命名空间?将它们放入系统命名空间中的(静态)calass中。命名空间与程序集,dll等没什么关系 - 你可以使用你喜欢的任何东西。

Oterhwise,做大多数人做的事 - 用工具类开始一个项目。我有一些我用于公共代码的。