2012-05-30 127 views
1

我有兩個函數,我似乎在軟件中包含了很多在類型之間轉換字符串和字節數組的功能。用法是這樣的:在C#中全局定義函數

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

首先,是有辦法,我可以包括這在System命名空間,所以我沒有在代碼來定義它了嗎?

其次,有沒有辦法將其定義爲String類的一部分,所以使用會更喜歡:

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

1)將常用的實用程序方法編譯爲DLL。 2)重新使用DLL。 3)??? –

+0

請注意,您的功能只有在特定的編碼下才有意義。 _注意Unicode_的恐怖! – SLaks

+0

只需使方法靜態... –

回答

7

你問在C#中通過Extension Methods提供。

+0

擴展方法只能將實例方法添加到現有類。如果你想要一個「near」的全局方法(沒有實例),你必須用靜態方法創建一個類 –

+1

YOu可以擴展字符串和字節[];) – TomTom

+1

@SteveB實際上,你也可以靜態調用一個擴展方法: Extensions.MyExtension(「some string」)'而不是''一些字符串「.MyExtension()'。 @TomTom'string'是'sealed','byte []'作爲基類型是無效的,所以你不能這樣做。 –

0
  1. 不; C#不支持頂級功能

  2. 您正在尋找擴展方法。

2

不要重新發明輪子,用Encoding類代替。你可以使用編碼實施

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

4

你爲什麼不使用System.Text.Encoding.Unicode.GetBytes

首先,有沒有一種方法可以將它包含在System命名空間中,這樣我就不必在代碼中定義它了?

我不知道你的意思是「用代碼來定義它」。你可以添加任何你想要的東西System,但這通常是皺起了眉頭。只要說

namespace System { 
    // add classes here 
} 

C#沒有像你想要的頂級方法。之前已經討論過這個Eric Lippert

其次,有沒有辦法將其定義爲String類的一部分,所以使用會更喜歡:

我想你可以在string定義的擴展方法:

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

如果你願意,把它放在命名空間System。再一次,這通常是皺眉,你仍然需要引用包含定義的程序集。

+0

謝謝,擴展方法幾乎是我所追求的。通過「在代碼中定義它」我的意思是將它添加到標準包含中,所以我不必將它添加到每個新項目中。 – Ali3nat0r

0

您只需要在名稱空間System內自定義Extension Method

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

首先,有沒有一種方法可以將它包含在System命名空間中,因此我不必在 代碼中定義它?

???你想要什麼?

系統命名空間?將它們放入系統名稱空間中的(靜態)類。命名空間與程序集,dll等沒有任何關係 - 你可以使用任何你喜歡的東西。

Oterhwise,做大多數人做的事 - 用工具類開始一個項目。我有一些用於通用代碼的應用程序。