C#如何在不使方法静态的情况下从界面内的另一个类调用方法?

时间:2017-07-13 15:58:29

标签: c# constructor interface static-methods

我正在尝试ping google以检查我是否已连接到互联网,我想在我的某个界面中实现此功能,但我不确定如何执行此操作,因为我的方法不是静态的。任何帮助或见解将不胜感激。接口的概念对我来说是新的,所以我可以用来更好地理解它们的任何资源也会非常有用! 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;
        }
    }

}

}

2 个答案:

答案 0 :(得分:3)

  

我想在我的一个接口中实现它

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

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

一般来说,如果一个方法没有引用它的类的任何实例成员,那么它应该是静态的(没有多少它是非静态的)。

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

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

答案 1 :(得分:0)

该方法不使用实例状态,因此该方法概念 static

作为实例方法没有意义。使其成为一个实例方法将暗示该方法使用对象的某种状态,并且要求任何希望执行该方法的人手头都有该类型的实例以执行操作,即使您不这样做也是如此。实际上计划将该对象用于任何事情。