从Main() c#调用非静态类中定义的非扩展方法
本文关键字:定义 扩展 方法 静态类 调用 Main | 更新日期: 2023-09-27 18:11:12
我试着从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);
}
但这仍然试图调用。net framework CopyTo()方法。我如何在代码中调用定义的方法?请帮帮我。
谢谢。
我如何在代码中调用定义的方法?
只是不要在流上调用(这会使它看起来像一个实例方法)。将其作为普通静态方法调用,使用两个参数对应两个形参:
CopyTo(webResponse.GetResponseStream(), ms);
非扩展静态方法永远不能在实例上调用。您可以只使用简单的名称,或者使用类型名称(Get.CopyTo(...)
)来限定它。
如果你使用的是支持CopyTo
的。net 4+,你就不清楚为什么要使用这个了
如果我对你的问题理解正确,你想创建一个扩展方法,将一个流复制到另一个流。要定义扩展方法,请使用
public static class myExtensions
{
public static void myCopyTo(this Stream input, Stream output)
{
// your code goes here
}
}
那么你可以这样调用它:
webResponse.GetResponseStream().myCopyTo(ms);
指出:
- 包含扩展方法的类必须是static并且必须是顶级类。
- 扩展方法也必须是静态的,它必须包含关键字
this
作为第一个参数。此参数表示要扩展的类的类型。 - 我已经重命名了你的方法,以避免与现有的。net框架的
CopyTo
方法冲突
我希望这对你有帮助。如果你需要任何额外的提示,请告诉我。