什么是.NET的用途和限制?

时间:2009-10-04 08:17:04

标签: .net winapi

我对.NET和C#/ C ++ .NET有一个非常浅薄的概念。我已经使用它几次来创建一些简单的独立应用程序。从我简单化的观点来看,我将其视为另一个“框架”,例如。图层,位于可用于编写应用程序的操作系统之上。有人可以更清楚地知道它的局限性和最有用的时间吗?

就限制而言,例如,你可以写一个..

  • 键盘记录器(需要挂钩?)
  • MIDI键盘输入转录器(例如,接受MIDI键盘输入并将其转录为乐谱 - 需要与MIDI设备驱动程序连接?)
  • 用于FPS的机器人(我想象的一堆复杂的东西)
  • 音频播放器的插件(例如Winamp.API可能是C ++)
  • 视频播放器(例如Windows Media Player)

仅使用.NET和C#(或C ++ .NET,如果需要)?即使技术上可行,使用.NET而不是Win32 API会有什么好处吗?

就实用性而言,.NET何时最有用?我意识到.NET可以独立于操作系统,有一堆类(这样你就不必重新发明轮子),可以用于移动开发等,但是就为Windows编写应用而言,你可以用.NET做的只是你可以用Win32 API做的一部分。使用.NET主要是​​关于方便性,易用性,更多抽象等等吗?

6 个答案:

答案 0 :(得分:2)

要对.NET Framework有一个公正的理解,请谷歌或查看wikipedia。 在我看来,它可以创建/执行“几乎”你想要做的其他语言/框架所能做的一切。

限制?好吧,维基百科有一个关于criticism的部分。

答案 1 :(得分:2)

  

就实用性而言,.NET何时最有用?

每当可以使用它时。你对.NET的看法似乎非常有限,当它真的反过来时:你应该问它什么时候有用。对于几乎所有意图和目的,.NET简化了软件编写的每个方面(与其他Win32语言相比,特别是C和C ++)。

这些是:

  1. 软件的概念/设计
  2. 编写代码
  3. 测试代码
  4. 调试代码
  5. 部署代码
  6. 由于更简单(更高级别)的语言,通用,易用的库,高级IDE支持以及许多其他工具,这些方面中的每一个都在.NET中得到了极大的改进和简化。 / p>

    C和C ++也存在所有这些,但支持总是有些粗略。这可能听起来很像营销唠叨,但它确实抓住了.NET与传统Win32开发的不同之处。

答案 2 :(得分:1)

.NET提供的优势主要是指两个元素:

  1. 自动内存管理=垃圾回收。您花时间实现有用的功能,而不是寻找内存泄漏。

  2. 提供大量开箱即用功能的.NET库类。从UI库到加密API,您可以获得很多。使用C ++,在大多数情况下,您会寻找第三方库来为您执行某项任务。

  3. 这两个导致更高的开发速度,吸引了大多数开发人员。大多数人没有尽可能快速执行代码的要求。

    如果你绝对需要用指针和内存管理来编写低级别的东西,你可以在C#应用程序中添加“不安全”的代码块(不确定VB.NET是否允许)。因此,您将在需要时将更高级别的API与高执行速度相结合。

    我不确定关键记录器或视频播放器,但我想这是可能的。关于视频播放器,它几乎肯定会使用某种能够实现硬件加速的API,所以使用你构建UI的工具包并不重要。

答案 3 :(得分:1)

我会说,对于那些东西,.NET并不是那么合适*。它的利基在其他地方,但它在那里蓬勃发展,因为它具有自动内存管理,许多漂亮的库,反射和良好的工具支持(重构,代码浏览......)。

(*)我在C#中为foobar2000(C ++)编写了一个音频播放器插件(参见http://foo-title.sf.net)。我可以想象一个FPS机器人,只要你编写代码将它粘贴到很可能用C ++编写的游戏中。

答案 4 :(得分:0)

  • 您无法将其用于实时应用程序,因为您不知道何时会触发GC。这意味着将媒体播放器建立在它上面真的很难。
  • 您不能在RAM少于64KB的计算机上使用它。
  • 您无法将其用于内核中的设备驱动程序。 (但您可以将它们与低级设备驱动程序结合使用)

就是这样。您可以在嵌入式设备,智能手机,Linux上,OS X上,iPhone上,XBox 360上,当然还有Windows上使用.NET。

.NET通常只是Windows使用的Win32或COM API的一个很好的包装器。

答案 5 :(得分:0)

如果您的应用是API的使用者,则几乎没有任何限制。互操作确实非常好,足以使C可以使用的任何API都可以从C#中使用。

即使是视频播放器也可以用C#编写 - 取决于你自己写了多少。如果你试图编写整个东西,那么你最终必须向DirectX提供数据缓冲区,这是可能的,但是一定数量的代码可能必须在不安全的块中,这消除了很多重点。使用托管语言。

如果你正在为另一个应用程序编写插件DLL,那么这个故事目前还不是很好。通常不建议这样做,因为在任何进程中只能加载一个版本的.NET运行时。例如两个开发人员针对不同版本的运行时为Windows资源管理器编写上下文菜单扩展,第二个要加载的将无法加载。

这在版本4.0中已得到修复,但是从该版本开始,也可以创作插件DLL。