我来自脚本背景,试图一起破解一些 C#。所以我不知道如何表达这个问题,但我确定我是在问这个问题,因为我不了解我无疑需要的 OOP!
基本上我有三个类:
class OSThingy
class XP : OSThingy
class Win7 : OSThingy
'OSTthingy' 类包含两个派生类都需要的通用属性和一些方法。每个派生类都实现了一个接口,该接口为它们提供了一些实现不同的通用方法。XP 和 Windows 7 之间的实现差异很大,所以我想将它们放在单独的类中。我还希望这种设计能够在不再需要时轻松删除与 XP 相关的东西。
在我的程序的入口点,我想创建一个正确类的实例,具体取决于它是在 Windows XP 还是 Windows 7 上运行。这是我到目前为止所拥有的(确实有效):
dynamic OSClass;
if (Environment.OSVersion.Version.ToString().StartsWith("5.1"))
{
OSClass = new XP();
}
else
{
OSClass = new Win7();
}
// Later on I use OSClass
OSClass.DoSomething();
但是,因为我使用的是 dynamic 关键字,所以 Intellisense 不起作用。当我稍后使用其中一个派生类时,是否有任何方法可以保留(至少部分)智能感知?
我在想如果我将接口应用到“OSThingy”类并用“OSTingy”替换动态,我至少会为“OSTingy”中定义的方法和属性获得 Intellisense,但不确定这是否是正确的方法它。
我确信答案是肯定的,但是有没有更好的方法在 Windows XP 和 Windows 7+ 之间分支代码路径?