我再次来这里寻求帮助。我正在编写我的第一个“类似真实”的应用程序来练习我学到的东西,但我不确定我的方法。我会尽力解释它,因为我的英语允许我这样做。
应用程序由基抽象类和从该基继承的三个类组成。
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
}
}
但正如我发现的那样,不可能覆盖返回类型。而且因为方法总是只在类内部使用,我看不出有理由使用接口“强制”它。
一段时间后,我决定忘记在派生类中强制实现,而是根据需要简单地编写它们。但你认为这是“合法”的做法吗?您将如何在“现实世界”应用程序中解决这样的问题?有什么我仍然缺少的东西,还是我的方法完全错误?谢谢你。
挣扎的绿角。