2013-04-29 2 views
1

Я пробовал вызывать метод расширения, определенный в статическом классе из Main(), он работал. Теперь я хочу использовать это в своем приложении, чтобы сделать это, мне нужно сделать метод расширения как статический метод (потому что у меня нет статических классов, определенных в моем приложении) и вызывайте его из Main().вызовите метод не расширения, определенный внутри нестатического класса из Main() C#

Вот что я пытаюсь:

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(). Как сделать вызов определенного метода внутри кода? Пожалуйста, помогите мне.

Спасибо.

+0

Get.CopyTo (...? –

ответ

6

Как мне позвонить определенному методу в код?

Только не называйте его на поток (что делает его похожим на метод экземпляра). Назовите это как обычный статический метод с двумя аргументами, соответствующих двум параметрам:

CopyTo(webResponse.GetResponseStream(), ms); 

Non-удлинители статические методы не могут быть вызваны на экземпляре. Вы можете использовать простое имя или присвоить ему имя типа (Get.CopyTo(...)).

Непонятно, почему вы хотите использовать это вообще, если используете .NET 4+, где поддерживается CopyTo.

+0

Спасибо, Jon, Это сработало. –

+0

Я использую .Net 3.5, который является поддерживаемой более высокой версией моим приложением. Поэтому я пробовал это. –

+0

@ user2314238: Если вы только используя .NET 3.5, как вы объясните свое утверждение, что «это все еще пытается вызвать метод .NetFramework CopyTo()»? Этот метод не существует в .NET 3.5. –

1

Если я правильно понял ваш вопрос, вы хотели создать метод расширения, который копирует поток в другой. Для того, чтобы определить метод расширения, используйте

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

Тогда вы можете назвать это следующим образом:

webResponse.GetResponseStream().myCopyTo(ms); 

Примечания:

  • класс, который содержит методы расширения должны be static, и это должен быть класс верхнего уровня.
  • Способ расширения также должен быть статическим, он должен содержать ключевое слово this как 1-й параметр. Этот параметр обозначает тип класса, который вы хотите расширить.
  • Я переименовал свой метод, чтобы избежать конфликтов с CopyTo существующего методом .NET фреймворки

Я надеюсь, что помогает. Пожалуйста, дайте мне знать, если вам нужны дополнительные подсказки.

Смежные вопросы