gpt4 book ai didi

C# 如何在不使方法静态化的情况下调用接口(interface)内另一个类的方法?

转载 作者:太空宇宙 更新时间:2023-11-03 22:56:37 25 4
gpt4 key购买 nike

我正在尝试 ping google 以检查我是否已连接到互联网,我想在我的一个界面中实现它,但我不确定如何执行此操作,因为我的方法不是静态的。任何帮助或见解将不胜感激。接口(interface)的概念对我来说是新的,所以任何我可以用来更好地理解它们的资源也会非常有帮助! checkConnection() 是我想要开始的地方,也许创建一个构造函数来实例化该方法?但我真的不确定如何实现。这是我目前所拥有的:

public class ApplicationManager : IApplicationManager
{

public void ManagerRun()
{

if (InternetConnectionCheck.CheckForInternetConnection() == true)
{

}
else if(InternetConnectionCheck.CheckForInternetConnection() == false)
{

}

public interface IApplicationManager
{
void ManagerRun();
bool checkConnection();
}

}

我删除了大部分代码,因为它与问题无关,但问题是“InternetConnectionCheck.CheckForInternetConnection() 曾经是一个静态方法,但它不再是一个静态方法,正如我想要的那样在界面中实现它,这样我就可以调用它一次,然后只要我想检查互联网连接,就可以在我的其余代码中引用它。这是检查代码:

class InternetConnectionCheck
{
public bool CheckForInternetConnection()
{
try
{
using (var client = new WebClient())
{
using (var stream = client.OpenRead("http://www.google.com"))
{
return true;
}
}
}
catch
{
return false;
}
}

}

最佳答案

I want to implement this in one of my interfaces

接口(interface)只允许您声明实现者必须具有的属性、方法和事件。接口(interface)方法不能有主体。在您的示例中,ApplicationManager 需要实现 IApplicationManager 接口(interface)所需的 checkConnection() 方法。

要从一个类调用另一个类的方法,它必须是静态的,或者您必须实例化该类的一个实例。

一般来说,如果一个方法不引用其类的任何实例成员,则它应该是静态的(非静态的意义不大)。

基于您的代码的一些其他提示:

  1. 您的界面可能应该在其自己的文件中,而不是 ApplicationManager 的子项。
  2. checkConnection 应该是 CheckConnection 以符合 C# 规范。
  3. 您可以在条件语句中省略 == true 并使用 ! 代替 == false,如 if (CheckForInternetConnection ())if (!CheckForInternetConnection())。更好的是,只需使用 else 而不是测试错误条件。 (正如@Servy 指出的那样,您在示例中进行了两次单独的调用,这不是您想要的)。

关于C# 如何在不使方法静态化的情况下调用接口(interface)内另一个类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45085802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com