簡體   English   中英

C#如何在不使方法靜態的情況下從界面內的另一個類調用方法?

[英]C# How do I call a method from another class inside of my interface without making the method static?

我試圖ping谷歌檢查我是否連接到互聯網,我想在我的一個接口中實現這一點,但我不確定如何做到這一點,因為我的方法不是靜態的。 任何幫助或見解將不勝感激。 接口的概念對我來說是新的,所以我可以用來更好地理解它們的任何資源也會非常有用! 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;
        }
    }

}

}

我想在我的一個接口中實現它

接口只允許您聲明實現者必須具有的屬性,方法和事件。 接口方法不能有正文。 在您的示例中, ApplicationManager需要實現IApplicationManager接口所需的checkConnection()方法。

要從另一個類調用一個類的方法,它必須是靜態的,或者必須實例化該類的實例。

一般來說,如果一個方法沒有引用其類的任何實例成員,那么它應該是靜態的(沒有太多的點是非靜態的)。

基於您的代碼的一些其他提示:

  1. 您的界面應該在自己的文件中,而不是ApplicationManager的子ApplicationManager
  2. checkConnection應該是CheckConnection以符合C#規范。
  3. 您可以在條件中省略== true並使用! 而不是== false ,如if (CheckForInternetConnection())if (!CheckForInternetConnection()) 更好的是,只需使用else而不是測試錯誤情況。 (正如@Servy指出的那樣,你在你的例子中進行了兩次單獨的調用,這不是你想要的)。

該方法不使用實例狀態,因此該方法在概念上static

作為實例方法沒有意義。 使其成為實例方法將暗示該方法使用對象的某種狀態,並且要求任何希望執行該方法的人擁有該類型的實例以便執行操作,即使您實際上沒有計划使用該對象的任何東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM