簡體   English   中英

不確定我在 .net 應用程序中的方法

[英]Not sure with my approach in .net application

我再次在這里尋求幫助。 我正在編寫我的第一個“真實的”應用程序來練習我學到的東西,但我不確定我的方法。 我會盡力解釋它,因為我的英語允許我這樣做。

應用程序由基礎抽象類和從該基礎繼承的三個類組成。

abstract class BaseClass
{
     // Some stuff...

     // This method is used in all classes. It gets whole adb output
     // and returns it as a string for future formating
    protected string ProcessAdbCommand(string command)
    {
        try
        {
            _processInfo.Arguments = command;
            Process adbProcess = Process.Start(_processInfo);
            adbProcess.WaitForExit();
            return adbProcess.StandardOutput.ReadToEnd();
        }
        catch (Exception e)
        {
            WriteToLog(e.Message);
            return null;
        }            
    } 
}

ProcessAdbCommand 返回輸出后,我將調用另一個方法來根據需要處理輸出。 原則始終是相同的 - 格式化輸出並根據輸出進行一些思考。

現在我想說清楚,負責輸出處理的方法需要在每個繼承的類中。 但問題是在非常類中它返回不同的值類型(布爾值、IDevice 列表和字符串)

我在這里掙扎。 首先,我想讓它受保護抽象。 有點像

abstract class BaseClass
{
     // Some stuff...

    // Same as above
    protected string ProcessAdbCommand(string command)
    {
            //Same as above
    }

    //Method which will be implemented in every inherited class differently
    protected bool|List<IDevice>|string ProcessAdbOutput(string adbOutput)
    {
            //Method implementation

            return bool|List<IDevice>|string
    } 
}

但正如我發現的那樣,不可能覆蓋返回類型。 並且因為方法將始終僅在類內部使用,所以我認為沒有理由使用接口“強制”它。

一段時間后,我決定放棄在派生類中強制實現,並根據需要簡單地編寫它們。 但你認為這是“合法”的做法嗎? 您將如何解決“現實世界”應用程序中的此類問題? 有什么我仍然缺少的東西還是我的方法完全錯誤? 謝謝你。

掙扎的綠角。

一種可能的方法是使抽象基類通用並接受T參數,該參數也可以是ProcessAdbOutput方法的輸出。 然后,將方法abstract以確保任何派生類型都必須實現它:

public abstract class BaseClass<T>
{
    protected string ProcessAdbCommand(string command)
    {
        return string.Empty;
    }

    public abstract T ProcessAdbOutput(string result);
}

public class DerivedClass : BaseClass<IList<IDevice>>
{
    public override IList<IDevice> ProcessAdbOutput(string result)
    {
        return new List<IDevice>();
    }
}

暫無
暫無

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

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