基本上,为什么需要两个对于一个相当简单的概念的抽象?
基本上,为什么需要两个对于一个相当简单的概念的抽象?
System.Windows.Media.Color
是System.Windows.Media
命名空间的一部分:
提供各种类型以在Windows Presentation Foundation(WPF)应用程序中集成丰富的媒体,包括绘图、文本和音频/视频内容。
System.Drawing.Color
是System.Drawing
命名空间的一部分:
System.Drawing命名空间提供对GDI+基本图形功能的访问。更高级的功能则由System.Drawing.Drawing2D、System.Drawing.Imaging和System.Drawing.Text命名空间提供。
我猜后者是特定于Windows的,而前者更通用,更容易移植到Mac OS等系统,以便在Silverlight应用程序中使用。
后者的命名空间还有一个警告,这也支持了这个猜测:
不建议在Windows或ASP.NET服务中使用System.Drawing命名空间中的类。从其中任何一个应用程序类型中尝试使用这些类都可能产生意想不到的问题,例如服务性能下降和运行时异常。
我认为这并非出于某种“需要”,只是他们在早期(可能错误地)决定将Color类放入WinForms特定的System.Drawing中,因为当时只有Win32和WinForms。
后来,当他们想要增强“Color”中的概念时,他们不希望WPF依赖于WinForms。因此,他们没有通过将更抽象的Color类移动到通用程序集来修复情况,而是在WPF中复制并粘贴了一个新的Color类。