不确定我的方法在.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总是只在类的内部使用,所以我不认为有理由"强制"使用接口来使用它。
过了一段时间后,我决定忘记在派生类中强制实现,只需根据需要编写它们。但你认为这是"合法"的做法吗?在"现实世界"的应用程序中,您将如何解决这样的问题?是我还遗漏了什么,还是我的方法完全错了?谢谢你。
苦苦挣扎的生手。
一种可能的方法是使抽象基类泛型并接受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>();
}
}