不确定我的方法在.net应用程序

本文关键字:net 应用程序 方法 我的 不确定 | 更新日期: 2023-09-27 18:12:32

我再次寻求帮助。我正在编写我的第一个"真实的"应用程序来实践我所学到的东西,我不确定我的方法。我将尽我的英语所能把它解释清楚。

应用程序由基抽象类和从该基类继承的三个类组成。

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列表和字符串)

我在这里挣扎。首先,我想让它成为受保护的抽象。Somethink像

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

但是正如我发现的那样,不可能重写返回类型。而且因为method总是只在类的内部使用,所以我不认为有理由"强制"使用接口来使用它。

过了一段时间后,我决定忘记在派生类中强制实现,只需根据需要编写它们。但你认为这是"合法"的做法吗?在"现实世界"的应用程序中,您将如何解决这样的问题?是我还遗漏了什么,还是我的方法完全错了?谢谢你。

苦苦挣扎的生手。

不确定我的方法在.net应用程序

一种可能的方法是使抽象基类泛型并接受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>();
    }
}