C# 从Main()c调用在非静态类中定义的非扩展方法

C# 从Main()c调用在非静态类中定义的非扩展方法,c#,C#,我尝试从Main调用在静态类下定义的扩展方法,它成功了。 现在我想在我的应用程序中使用它,为此我需要将扩展方法作为一个静态方法,因为我没有在我的应用程序中定义静态类并从Main调用它 以下是我正在尝试的: public class Get { public static void CopyTo(Stream input, Stream output) //Method { byte[] buffer = new byte[32768];

我尝试从Main调用在静态类下定义的扩展方法,它成功了。 现在我想在我的应用程序中使用它,为此我需要将扩展方法作为一个静态方法,因为我没有在我的应用程序中定义静态类并从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方法。如何在代码中调用已定义的方法? 请帮帮我

多谢各位

如何在代码中调用已定义的方法

只是不要在流上调用它,这会使它看起来像一个实例方法。将其作为普通静态方法调用,两个参数对应于两个参数:

CopyTo(webResponse.GetResponseStream(), ms);
不能对实例调用非扩展静态方法。您可以只使用简单名称,也可以使用类型名Get.CopyTo….对其进行限定

如果您使用的是.NET4+,并且支持CopyTo,那么不清楚为什么要使用它

如何在代码中调用已定义的方法

只是不要在流上调用它,这会使它看起来像一个实例方法。将其作为普通静态方法调用,两个参数对应于两个参数:

CopyTo(webResponse.GetResponseStream(), ms);
不能对实例调用非扩展静态方法。您可以只使用简单名称,也可以使用类型名Get.CopyTo….对其进行限定


如果您使用的是.NET 4+,并且支持CopyTo,那么您为什么要使用它还不清楚。

如果我没有弄错您的问题,您想创建一个扩展方法,将一个流复制到另一个流中。要定义扩展方法,请使用

public static class myExtensions
{
     public static void myCopyTo(this Stream input, Stream output)
     {
        // your code goes here
     }
}
然后你可以用以下方式来称呼它:

webResponse.GetResponseStream().myCopyTo(ms);
注:

包含扩展方法的类必须是静态的,并且必须是顶级类。 扩展方法也必须是静态的,它必须包含关键字this作为第一个参数。此参数表示要扩展的类的类型。 我已重命名您的方法,以避免与现有.NET framework的CopyTo方法发生冲突
我希望这有帮助。如果您需要任何其他提示,请告诉我。

如果我正确理解您的问题,您希望创建一个扩展方法,将一个流复制到另一个流中。要定义扩展方法,请使用

public static class myExtensions
{
     public static void myCopyTo(this Stream input, Stream output)
     {
        // your code goes here
     }
}
然后你可以用以下方式来称呼它:

webResponse.GetResponseStream().myCopyTo(ms);
注:

包含扩展方法的类必须是静态的,并且必须是顶级类。 扩展方法也必须是静态的,它必须包含关键字this作为第一个参数。此参数表示要扩展的类的类型。 我已重命名您的方法,以避免与现有.NET framework的CopyTo方法发生冲突
我希望这有帮助。如果您需要任何其他提示,请告诉我。

我正在使用.Net 3.5,这是我的应用程序支持的更高版本,因此我尝试了这个方法。@user2314238:如果您只使用.Net 3.5,您如何解释您的陈述,即它仍在尝试调用.NetFramework CopyTo方法?该方法在.NET 3.5中不存在。错误说明..'System.IO.Stream'不包含“CopyTo”的定义,并且找不到接受“System.IO.Stream”类型的第一个参数的扩展方法“CopyTo”。@user2314238:好的,因此,它并不是试图调用框架CopyTo方法,而是试图调用任何CopyTo方法,而这在.NET3.5中是不存在的。我认为问题是如何使扩展方法工作的,因此我添加了这个作为一个单独的答案。请注意,M.K希望使用自己的代码在内存中复制流。我正在使用应用程序支持的更高版本.Net 3.5,所以我尝试了这个方法。@user2314238:如果您只使用.Net 3.5,您如何解释您的语句,即它仍在尝试调用.NetFramework CopyTo方法?该方法在.NET 3.5中不存在。错误说明..'System.IO.Stream'不包含“CopyTo”的定义,并且找不到接受“System.IO.Stream”类型的第一个参数的扩展方法“CopyTo”。@user2314238:好的,因此,它并不是试图调用框架CopyTo方法,而是试图调用任何CopyTo方法,而这在.NET3.5中是不存在的。我认为问题是如何使扩展方法工作的,因此我添加了这个作为一个单独的答案。请注意,M.K希望使用自己的代码在内存中复制流。