2009-05-20 12 views
1

上の私は、このコードsample読んでいます:Base64ToHex()のサンプルコード

をそして、私はC#のを知らないので、私はそれをやってみることにしました。

私はこのメッセージを持ってコンパイルしている間

Main.cs(32,65): error CS1061: Type `string' does not contain a definition for `Base64ToHex' and no extension method `Base64ToHex' of type `string' could be found (are you missing a using directive or an assembly reference?) 
Compilation failed: 1 error(s), 0 warnings 

私はMSDNで見てきたし、予想通り、私はそのメソッドの参照を見つけることができませんでした。

質問:この方法はどこから来たのですか?

p.s.私のコードは次のようになります。そのコードは、これまで遵守した場合

using System.Security.Cryptography; 
using System.Text; 
using System; 

class MainClass 
{ 
    public static string Encrypt(string toEncrypt, string key, bool useHashing) 
    { 
     ..... // same as in post 
     ..... 
    } 

    public static void Main(string [] args) 
    { 
     string key = "secret"; 

     Console.WriteLine(Encrypt("oscar" + "000", key, true).Base64ToHex()); 
    } 

}

+0

そのメソッド呼び出しは、読んでいるコードのコードにありますか? – CSharpAtl

+0

彼らはBase64ToHex()というエクステンションメソッドを書いたライブラリへの参照を持っているかもしれません。 – CSharpAtl

+0

@CSharpAlt:はい、そのリンクは投稿にあります。 2番目のコードセグメントにあります。 Debug.WriteLine( 暗号化( "try some different" + "000000000000000000000000000000"、 key、true).Base64ToHex()); – OscarRyz

答えて

1

、ジェフはおそらく「Base64ToHex」と呼ばれる文字列の拡張メソッドを持っていました。 Extension methodsは、あなたがそれをする方法は、実際にそのクラスで定義されたように見えるように、他のクラスを「拡張」するメソッドを定義することができます:

public static class ExtensionMethods 
{ 
    public static string Base64ToHex(this string str) 
    { 
     return ...; 
    } 
} 
+0

これは可能性が高いです。私は拡張メソッドについて知りませんでした。彼らは私が推測する最終的でないクラスにのみ追加することができます、そして、私はストリングが最終的ではないと思います、そうですか? 「静的な」アクセス修飾子には何がありますか?それは必要ですか?静的クラスとは何を意味しますか? – OscarRyz

+0

Stringクラスは封印されています(「最終」アクセス修飾子はJavaです)。拡張メソッドについてはうってつけです。拡張可能でないクラスを拡張することができます。メソッドは静的である必要がありますが、クラスは必須ではありません。静的クラスとは、インスタンス化できないクラスです(誤って実行したくないように)。 –

+0

メソッドを呼び出すときに、(usingステートメントで)包含するクラスを参照する限り、拡張するには、任意の場所に拡張メソッドを宣言できます。私は、私の拡張メソッド(私はそれらの多くを持っていません)を機能別にグループ分けし、それらをウィル・ニルにするのではなく、 –

1

System.StringにはBase64ToHex方法はありません。私はあなたがConvert.FromBase64StringBitConverter.ToStringを探していると思う:

string encrypted = Encrypt("oscar" + "000", key, true); 
Console.WriteLine(BitConverter.ToString(Convert.FromBase64String(encrypted))); 

は、私はあなたのリンクを見ていた、と私は彼が同じことをヘルパー拡張メソッドを書いた推測している:

public static string Base64ToHex(this string s) 
{ 
    return BitConverter.ToString(Convert.FromBase64String(s)); 
} 
関連する問題