从.NET开始 - ASP.NET、WPF、Silverlight还是命令行C#?

8
如果有人想要开始学习.NET框架,最可行的模板是什么?我所说的可行性是指学习曲线最低和收益最高的那个。
从以下几个方面开始:
- 使用C#的命令提示符应用程序? - 使用ASP.NET制作Web应用程序? - 使用XAML/C#制作Silverlight应用程序? - WPF / Winforms桌面应用程序?
我不想过分关注某个特定领域,而是想在.NET Framework 4.0中学习一点点所有内容。学习.NET的最佳顺序是什么?
10个回答

12

控制台应用程序显然是起点:用户界面是一个广阔的森林,在你开发出在野外找到路径的能力之前,试图穿越它是没有意义的。此外,在使用C#做其他任何事情时,您学习控制台应用程序时所学到的一切都是适用的。

接下来要学习的是如何构建用户界面。我对那些建议你学WinForms的人持有不同意见: 是的,关于如何使用它有很多信息,有很多工具,而且在其最简单的形式下,它相当容易理解。但是,WinForms存在两个问题。

首先,许多WinForms使之易于实现的功能实际上是非常糟糕的编程实践。在WinForms编程中,在同一类中混合业务和演示逻辑是正常的,而打破这种习惯需要相当大的努力,特别是因为数据绑定 - 在解耦数据模型与表现方面的关键工具 - 在WinForms中相对较少,而在WPF体系结构中则至关重要。WPF需要学习的内容更多,但你最终会编写出更好的程序。

其次,WinForms即将走向生命尽头。你不会看到微软投入更多资源来改进它。他们已经完成了。这并不意味着它将来不会有用 - 它会有用 - 但是它在软件开发生态系统中的整体渗透率,现在已经达到了最大值。

选择WPF的另一个原因是,你学习WPF时所学的大部分内容也适用于Silverlight,这打开了WinForms永远无法打开的门。

至于ASP.NET,除非需要,否则最好不要学习。


1
我同意。我还要补充一点,对于一个没有被WinForms腐蚀的初学者来说,WPF是一个更容易理解和使用的模型。例如,最基本的WinForms代码用于以编程方式向表单添加按钮需要计算并设置它们的坐标。而在WPF中,您根本不必处理坐标-ItemsControl会为您处理。我可以举出许多其他例子。 - Ray Burns
1
上个月我在短短七小时内向十二名孩子介绍了编程、C#和WPF的基础知识。在我们的课程结束时,他们已经能够编写带有条件和循环的真实C#代码,创建和使用对象,并进行UI设计、布局和动画制作。而且他们实际上理解自己在做什么。我曾经在WinForms时代向初学者教授过同样的技能。但是使用WPF和Expression Blend来教授初学者的效果更加顺畅和容易,这让我感到惊讶。 - Ray Burns
1
如果您决定使用WPF,请记住以下几点: 需要使用最新版本的Visual Studio以获得良好的支持。旧版本相当有缺陷。 可能无法在旧硬件或netbook上运行,因为需要硬件视频支持 许多旧代码仍在使用WinForms。 - daveangel
VS2008的漏洞对我来说并不是问题:我还没有使用它的WPF设计界面。我大多数的WPF设计都在Kaxaml中完成,直到我最终下定决心并学会了如何使用Expression Blend。WPF的可组合性使得视觉设计师对于普通软件开发来说变得不那么重要了。 - Robert Rossney
以下提供一个链接,该链接指向一个便捷的墙贴,展示了WinForm / WPF、VS 2008 / 2010以及.NET 3.5 / 4.0之间的差异,以便了解WPF相对于WinForm的优缺点。反之亦然。 http://www.simple-talk.com/dotnet/.net-framework/from-winform-to-wpf-a-quick-reference-guide/ - daveangel

3

命令提示符可能是最简单的,因为您可以忽略消息和类似的内容,但当然您的功能非常有限。接下来是WinForms,它相对容易,因为您可以轻松地跟踪状态。

但这可能取决于您当前的经验,如果您已经有一些Web经验,那么WebForms可能比WinForms更适合您。


2

你是否需要开发或拥有一个应用程序?

如果是的话,请尽量详细地定义它,然后你就会有一组需要实现的目标。

一旦你有了这些目标,就可以确定最适合解决问题的技术。

例如,如果你有一个相当静态的UI界面,WinForms可能还可以,但如果你想要整合动画和其他视觉效果,那么你应该考虑使用WPF / Silverlight。


2

命令行/控制台应用程序开始。

为什么?

首先是实现面向对象概念的基础,但不涉及复杂的Web应用程序/Windows应用程序/服务等内容。

使用控制台应用程序模板进行编程将使您远离不必要的复杂性,并且您可以集中精力研究框架和功能的内部工作原理。

完成后,如果已经探索了诸如System.Collections等功能/库,则应根据兴趣和以前的开发经验从广泛的开发领域中选择。

例如Web应用程序开发/桌面应用程序开发等。

这将帮助您决定进一步追求哪种技术,并与您的兴趣并行。例如,如果您对Web应用程序开发感兴趣,则可以选择Asp.Net WebForms / Asp.Net MVC等,而无需浪费时间在Windows Forms或WPF上。

希望这能帮到您。


1
如果我要教一个完全不懂编程的人,我会从控制台应用程序开始。这将为您提供教授基本面向对象编程概念的机会,而不会增加GUI开发的复杂性或ASP.Net页面生命周期的潜在复杂性。
然后我会转入WinForms开发,并着重讲解事件驱动编程和GUI。

1
你已经了解哪些编程环境?
我会从标准的Windows应用程序(WinForms)开始,因为你可以轻松地将可视化组件拖放到窗口上,并快速、简单地创建一些交互性。
虽然大多数项目可以很容易地创建并立即运行,但Web应用程序需要更多的基础设施和对Web的了解。

1

当我说到最好的编程语言时,我指的是学习曲线最低、收益最高的语言。目前我不想过多地专注于某个特定领域,而是想要在.NET Framework 4.0中学习一点点所有的知识。

如果您已经在.NET上编程了一段时间,那么您就会知道上述两个句子是矛盾的,哈哈。

截至上次检查,.NET包含:

程序集 y = 15.1x + 17.3 108个

命名空间 y = 51.6x + 51 361个

类型 y = 2249.3x + 626.9 14123个

成员 y = 21343x + 7951.3 136009个

所以,即使你已经全职使用.NET编程一段时间了,你也只是触及到了表面! 你甚至没有提到你是否已经精通C#,但如果没有,你可以阅读Petzold的免费电子书来快速掌握它,因为这是Silverlight、ASP和WinForms编程中最常用的语言。 如果像我一样,命令行让你感到无聊,那么我建议你阅读"Head First C#"这本书,它会给你一个温和的介绍,让你了解C#和.NET的能力。


0

根据您指定的标准,这是我的评估:

  • 命令行很容易学习,但你不能做太多事情,只能打印文本,所以在玩几个简单的程序后,你很快就想要进一步学习。

  • WPF/Silverlight是第二容易学习的技术,只要你先通过一些使用DataTemplates和ItemsControl的示例进行实践。一旦你熟悉了这些,你可以专注于学习C#和.NET Framework基类库的复杂性,或者你可以探索WPF的图形元素。

  • WinForms应该避免使用,因为它比WPF/Silverlight更难理解:在WPF/Silverlight中,你创建数据对象,然后绘制一个显示它们的视图,而且WPF/Silverlight处理所有的定位和布局。在WinForms中,你必须手动在数据对象和UI对象之间传输数据,并且必须明确地定位每个元素。WinForms的其他缺点是它正在迅速过时,并且它会迫使你采用一些非常糟糕的编程实践。

  • 毫无疑问,ASP.NET是你列出的所有技术中学习曲线最高的,我会尽力尽可能地远离它!

当你准备从命令行毕业(可能在一周内),选择使用WPF或Silverlight并不是很重要。WPF稍微容易部署,技能也可以很好地转移,所以我建议从那里开始。

首先创建一个简单的WPF应用程序,其中包含一个带有按钮、列表框和一个或两个文本框的窗口。在您的UserControl中创建属性并进行绑定。然后开始尝试。有许多步骤指南可以帮助您入门。我发现Adam Nathan的书《WPF Unleashed》对初学者来说是一个非常好的资源。

如果可以的话,请获取Expression Blend的副本。您可以下载30天的试用版本。它在玩弄WPF的UI方面非常有帮助,并学习它们的工作方式,特别是资源、模板和动画。

最后一个提示:如果您发现了一本包含以下代码的书籍或博客,请逃之夭夭:

for(int i=0; i<10; i++)
{
  Button b = new Button();
  ...
  panel.Add(b);
}

(当然,除非作者只是使用这样的代码来向你展示哪些做法是不好的。)

0

对于最初的步骤,我建议使用命令行应用程序。

对于其他方面,请跟进WinForm应用程序。它们在教程等方面拥有广泛的网络覆盖,并提供涵盖基本和高级C#功能的各种问题和解决方案。

ASP.NET、Silverlight和WPF是那些基础(控制台和Winforms)的进一步扩展,实际上添加了另一组框架库。这些是你在掌握基础知识后可以学习的糖衣。

别误会我的意思,你也可以通过Silverlight或WPF应用程序学习基础知识。但WinForm几乎被每一个开发C#的人所熟悉,因此你更有可能在网络上(在SO或其他地方)找到好的答案来解决你可能遇到的困难问题。这里有很多比我更有经验的人,他们可以帮助你探索.NET框架的深度。

一旦你掌握了这些部分,就可以自由地探索新的领域 - 很快你将成为回答我关于WPF问题的人,而我对此一无所知;-)


我不同意你的说法,即在网络上寻找WinForms问题的好答案是“最有可能的”。大多数我遇到的WinForms建议都很差,仅仅因为WinForms模型和传统鼓励糟糕的编程实践。例如,WinForms实际上具有可用的数据绑定功能(虽然不如WPF好用),但在十年时间里,我只发现过一次真正使用它的应用程序代码。几乎你在网上找到的每一个WinForms示例都是糟糕的编程实践,而这反映在我看到的实际WinForms应用程序中。 - Ray Burns
@Ray Burns: 先不探讨WinForms是否会教授不良的编程习惯,相比Silverlight等技术,有关如何编程的信息更加丰富。这也是我建议选择它们的原因。 - Treb

0
我建议先构建简单的命令行程序,以熟悉语言和.NET框架。然而,在一个UI驱动的世界中,这可能有点不尽人意。许多基于UI的技术将向您介绍与外部框架集成的概念,这本身就是一种关键经验。通常情况下,这非常有益,因为其他人已经完成了艰苦的工作,您只需享受其中的乐趣。
个人而言,我建议最后学习ASP.NET - 它有点奇怪,你会养成坏习惯。
基于这个建议,我建议接下来学习WinForms,它将教你更多关于事件和UI交互的知识,但没有严格的编码模式。在我早期的日子里,我写了一些令人震惊的WinForms代码。你有很大的能力,但缺少指导。
我看到一些使用WPF的好作品,但需要大量阅读。至少作为起点,您可以用很少的代码制作一些高级设计 - 出错的机会较小,您可以逐步成长。

在尝试控制台应用程序后,我首先推荐的用户界面是ASP.NET MVC框架。它易于编码,具有相对严格的设计模式,因此您不会犯太多错误,并且您可以在相对较短的时间内构建相当不错的网站。与其他技术相比,我个人学习速度非常快,但发现其可扩展性点非常好,让我保持了兴趣。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接