C#如何从接口中的另一个类调用方法而不使该方法成为静态的?

C#如何从接口中的另一个类调用方法而不使该方法成为静态的?,c#,constructor,interface,static-methods,C#,Constructor,Interface,Static Methods,我正在尝试ping google来检查我是否连接到互联网,我想在我的一个接口中实现这一点,但我不确定如何做到这一点,因为我的方法不是静态的。任何帮助或见解都将不胜感激。接口的概念对我来说是新的,所以我可以使用任何资源来更好地理解它们也会非常有用!checkConnection()是我想要开始的地方,也许是创建一个构造函数来实例化这个方法?但我真的不确定如何实现这一点。 这就是我到目前为止所做的: public class ApplicationManager : IApplicationMana

我正在尝试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()以前是一个静态方法,但现在不再是静态方法,因为我想在接口中实现它,这样我就可以调用它一次,然后只要我想进行internet连接检查,就可以在代码的其余部分引用它。 这是检查的代码:

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;
        }
    }

}
}

我想在我的一个接口中实现这一点

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

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

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

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

  • 您的界面可能应该在它自己的文件中,而不是
    ApplicationManager
    的子界面
  • checkConnection
    应为
    checkConnection
    ,以符合C#规范
  • 您可以在条件中省略
    ==true
    ,使用
    而不是
    ==false
    ,如
    if(CheckForInternetConnection())
    if(!CheckForInternetConnection())
    。更好的方法是使用
    else
    ,而不是测试false条件。(正如@Servy指出的,在您的示例中,您正在进行两个单独的调用,这不是您想要的)

  • 该方法不使用实例状态,因此该方法在概念上是静态的


    作为实例方法是没有意义的。将其作为实例方法将意味着该方法使用对象的某些状态,并且要求希望执行该方法的任何人手头有一个该类型的实例来执行该操作,即使您实际上不打算将该对象用于任何用途。

    hink,要么你对什么是接口以及为什么要使用它们感到非常困惑,要么你需要回去重写你的问题。你谈论接口的方式没有多大意义。请注意,你当前的用户在只需要一个接口的情况下执行了两次到Google的往返。你从第二次检查中什么也得不到n浪费很多时间。是的,对不起,我可能不够具体,我可能在这里使用了错误的术语。我在项目中使用的其他东西的接口,但我需要使用我的互联网连接检查在我运行我的代码的其余部分之前,因为代码是上传到互联网上的东西。我相信我需要创建一个构造用于internet连接检查的tor?听起来对吗?FYI-这不是“pinging”“谷歌,它实际上是在打开一个HTTP连接。如果你真的想ping,就有了。嘿,Jon,感谢你的快速响应,我相信我在这里使用了错误的术语,因为我对编码非常陌生。我想做的是使用InternetConnectionCheck.CheckForInternetConnection()方法,但我不想每次都这样调用该方法,我正在寻找一种方法来创建一个我相信的构造函数,然后在方法中使用该方法来调用“ConnectionCheck”看看这是真是假false@John在没有明确定义构造函数的情况下,您仍然可以使用默认构造函数:
    var connectionChecker=new InternetConnectionCheck()
    。给定您的代码,我将返回使用
    static
    ,因为您没有使用任何实例成员。