[英]Calling non-static void from another cs file
我是C#的新手,我可能知道以前有人问过同样的事情。 我在google以及在此处的stackoverflow上找到了一些信息,但我只是无法使其正常工作。
我需要调用一个非静态的void(MainPage.cs / class MainPage)。
public async void UploadThat()
{
.
.
.
.
Messagebox.Show("Hello there!");
}
从另一个cs文件(WebServer.cs)。
我试图在Webserver.cs文件中这样做:
using MainPage;
.
.
.
public MainPage test;
然后调用: test.UploadThat();
它成功编译了我的应用程序,但无法正常工作。 提前致谢..
有几种解决方法。 这是最常见的两个:
直接调用该方法; 由于该方法不是静态的,因此需要引用MainPage
实例。 该实例可以传递给WebServer
的构造函数,并存储为字段。 注意,这种方法会导致类之间的高度耦合,这通常是不希望的。
在WebServer.cs中:
private readonly MainPage _mainPage; public WebServer(MainPage mainPage) { _mainPage = mainPage; } ... _mainPage.UploadThat();
在MainPage.cs中:
WebServer ws = new WebServer(this);
在WebServer
类中公开事件; 让MainPage
通过调用UploadThat
处理此事件; 当WebServer
想要调用UploadThat
,它仅引发事件,而MainPage
负责处理。 这样, WebServer
不必了解MainPage
。
在WebServer.cs中:
public event EventHandler UploadRequested; private void OnUploadRequested() { EventHandler handler = UploadRequested; if (handler != null) handler(this, EventArgs.Empty); } ... // instead of calling UploadThat directly OnUploadRequested();
在MainPage.cs中:
WebServer ws = new WebServer(); ws.UploadRequested += ws_UploadRequested; ... private void ws_UploadRequested(object sender, EventArgs e) { UploadThat(); }
附带说明一下,除了事件处理程序或方法重写之外,应避免使用async void
方法。 本文解释了原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.