1

Main() から静的クラス配下に定義された Extension メソッドを呼び出してみたところ、うまくいきました。これをアプリケーションで使用したいのですが、そのためには、Extension メソッドを静的メソッドとして作成し (アプリケーションで静的クラスが定義されていないため)、Main() から呼び出す必要があります。

ここで私がしようとしていること:

public class Get 
{  
     public static void CopyTo(Stream input, Stream output) //Method
       {
       byte[] buffer = new byte[32768];  
       int read;
       while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
       {
       output.Write (buffer, 0, read);
       }
       }  
 public static void Main ()
    {
              ////I' m just mentioning a small part of my code
              ////Please ignore about the variables(url, baseURL,authenticatestr...) those are not declared here, they have been declared at some other part in the code
            /////Here in the main method I have a call to the above method

       HttpWebRequest request = (HttpWebRequest)WebRequest.Create (url);
       request = (HttpWebRequest)WebRequest.Create (baseURL + uri);
       request.Headers.Add ("Authn", authenticateStr);
       request.Accept = "";
       request.Method = "GET";
       webResponse = (HttpWebResponse)request.GetResponse();
       using (MemoryStream ms = new MemoryStream())
       using (FileStream outfile = new FileStream("1" , FileMode.Create)) {
           webResponse.GetResponseStream().CopyTo(ms);///Here I need to call my method                                                                      
           outfile.Write(ms.GetBuffer(), 0, (int)ms.Length);
                }

しかし、これはまだ .NetFramework CopyTo() メソッドを呼び出そうとしています。コード内で定義されたメソッドを呼び出すにはどうすればよいですか? 私を助けてください。

ありがとうございました。

4

2 に答える 2

6

コード内で定義されたメソッドを呼び出すにはどうすればよいですか?

ストリームで呼び出さないください (インスタンス メソッドのように見えます)。2 つのパラメーターに対応する 2 つの引数を使用して、通常の静的メソッドとして呼び出します。

CopyTo(webResponse.GetResponseStream(), ms);

インスタンスで非拡張静的メソッドを呼び出すことはできません。単純な名前だけを使用することも、型名 ( Get.CopyTo(...)) で修飾することもできます。

CopyToがサポートされている.NET 4+を使用している場合、なぜこれを使用する必要があるのか​​ は明確ではありません。

于 2013-04-29T06:18:37.430 に答える
1

私があなたの質問を正しく理解していれば、ストリームを別のストリームにコピーする拡張メソッドを作成したいと考えていました。拡張メソッドを定義するには、次を使用します

public static class myExtensions
{
     public static void myCopyTo(this Stream input, Stream output)
     {
        // your code goes here
     }
}

次に、次の方法で呼び出すことができます。

webResponse.GetResponseStream().myCopyTo(ms);

ノート:

  • 拡張メソッドを含むクラスは静的である必要があり、最上位クラスである必要があります。
  • 拡張メソッドも静的である必要があり、最初のパラメーターとしてキーワードが含まれている必要がありますthis。このパラメーターは、拡張するクラスのタイプを示します。
  • CopyTo既存の .NET フレームワークのメソッドとの競合を避けるために、メソッドの名前を変更しました

それが役立つことを願っています。追加のヒントが必要な場合はお知らせください。

于 2013-04-29T06:37:56.280 に答える