.Net 增加了我的开发时间 - 我有什么遗漏的吗?

3
我最近开始学习C#,但我发现它非常令人沮丧。每次想添加一个我认为很简单的控件时,我要么在网上搜索资料,要么自己编写控件。我感觉我花费的时间更多的是重新创建可以正常工作的控件,而不是实际创建应用程序。
例如:在另一个问题中,我问是否有可能去除组合框上的边框;这是我认为应该内置在控件中的东西,但可惜的是我必须自己构建控件以进行这个简单的更改。
我是不是对C#/.net太新了,或者我的期望值过高?我知道SO喜欢C#,所以不要因为我的感受而咬我的头,只是帮我理解我缺失了什么,以及是否应该继续学习和使用C#。

7
听起来你更多的问题是关于你的IDE而不是C#语言本身。 - Bayard Randel
2
无论语言有多好,或者库有多全面和优雅,学习新东西都需要时间。而且.NET中肯定存在不太优雅的部分!WinForms带着很多遗留问题,WebForms最好不要谈论。话虽如此,一旦你习惯了它,你可能会发现它非常好用 - 给它一些时间...哦,不是要咬你的头,但这个问题有点主观/争议性。 - Shog9
2
C#相比于什么会增加开发时间? - dance2die
2
请告诉我有什么比C#更高效的语言吗?自2001年起我一直在使用C#(之前是C和C ++),但我很想知道是否有比VS / C#更高效的语言/环境。 - billb
2
尝试去除主观/争论性语气,投票重新开放。 - Rex M
显示剩余5条评论
9个回答

12

今天我花了4个多小时去追踪C++程序中的8字节内存泄漏问题。这涉及到线程,并且附加调试器会改变线程定时,因此我甚至不能简单地在第N次分配上中断以查看泄漏位置。此外,我知道通常在哪两个事件之间分配了内存。不幸的是,两个线程都认为这是一个很好的时间来大量分配8字节大小的对象。在调查的最后,我发现COM指针的引用计数错误导致了内存泄漏。

如果您想避免为此类调查而抓狂,那就应该转向C#。


6
例如,在另一个问题中,我问是否有可能去掉组合框上的边框;我认为这应该是内置于控件中的,但不幸的是,我不得不为这个简单的修改构建自己的控件。
当然,您无法删除组合框上的边框。它们是Win32控件,必须遵守Win32的规则。这包括让操作系统和用户而不是应用程序对样式进行控制。
如果您想在Windows上完全自定义样式,则需要查看WPF。

6

我认为你真正想表达的是:

.NET上的Windows Forms增加了我的开发时间 - 我是不是漏掉了什么?

我认为你确实漏掉了几个方面:

  • 开放思路 - 任何新编程语言都不仅带来新的语法,还有新的范式。如果你来自C++,那么像垃圾回收这样的范式可能听起来“过于自动”,你希望有更多的控制权,但是你必须放手。无论何时跳出一个范式到另一个范式,先决条件总是能够忘记你一直以来所知道的。
  • Windows控件与Web控件不同 - 我查看了你之前的问题,看起来你使用VBScript,这可能意味着你要么从Office中使用它,要么从ASP Classic中使用它。也就是说,在Web中容易创建的控件在Windows中会更加困难 - Windows并没有被设计成易于修改。这就是为什么WPF / Silverlight应运而生。
  • 学习能力影响生产力 - 是的,我说了。这可能会伤害你,但是,如果你的学习过程中充满了愤世嫉俗或敌意,你将无法很快变得有生产力。如果你习惯于不必学习新事物,那么你也不会很快变得有生产力。如果你认为自己学习新事物非常擅长,你将找到一种方式在这种语言中变得有生产力 - 然后我们可以讨论你的论点在开发时间方面的优点。

你说得对,我的问题似乎确实与 .net 有关。至于你的第二点,我不从事网站开发,我使用 VBScript 进行应用程序测试,因此我不涉及控件。我在学习 C# 方面做得很好,我理解这门语言,只是控件设计的缺乏让我感到沮丧。但再次强调,这可能是 .net 的问题,我不应该把它归咎于 C#。 - Tester101

4

对于任何新技术而言,一开始都有相当大的学习曲线,有些比其他技术更难掌握。但是随着您获得更多的经验,您会发现这些东西变得更加容易。C#具有很强的.Net架构支持,可以从中受益,但是需要花费时间才能真正欣赏它的优势。C#也在不断地变化和发展,以允许新的编码风格(较新版本包含了很多函数式编程的影响),使其既时尚又强大。坚持下去并继续学习。


3

听起来你刚接触这个。问题不在于C#,而是.net框架。如果你使用VB.net,例如,你可能会遇到同样的问题。

当我从经典ASP转到ASP.net时,我也遇到了这个问题。大约半年左右,我感觉ASP.net中想做的事情在经典ASP中要容易得多。最终,这种感觉消失了。现在我再次尝试学习ASP.net MVC时,又遇到了这个问题。在ASP.net中可以在5分钟内完成的事情,在ASP.net MVC中需要花费几天时间才能弄清楚。

在你的情况下,听起来你正在使用Windows表单。以前你是否使用过WinForms(即VB6)?如果你想更好地控制样式,你可能需要看看WPF。


3

您不是第一个也不是最后一个有这种感觉的开发者。在我需要完成一项演示之外的任务时,似乎总是要花费数小时来尝试解决一个小问题。其中很多挫败感来自于ASP.NET Web控件。

话虽如此,我发现一旦克服了控件开发的(陡峭)学习曲线,许多挫败感都得到了解决。我觉得使用继承和重写虚拟成员来创建新行为是一种非常干净的方法。此外,它还可以创建非常容易重用的输出。对我来说,使用面向对象的实践总是比在各个地方粘贴JavaScript代码片段更好。

微软做得很好,提供了许多基本控件供开箱即用,但每个应用程序似乎总需要缺少的东西。我建议学习控件开发,或者尽可能寻找第三方解决方案。有许多公司存在的唯一目的就是填补这些空白。无论哪种方式,我不会根据默认控件集来评判整个语言。


2
是的,你缺少的是使用工具的经验。
例如,几个月前我决定我的下一个项目将使用ASP.NET MVC。我已经使用WebForms做了几年,并且尝试过RubyOnRails来开发一些个人应用程序。MVC符合我增加应用程序可测试性的愿望,而且我大部分时间都喜欢自己编写HTML。
尽管我有ASP.NET、C#和RoR中MVC的经验,但我仍然花费了很长时间才能与WebForms相匹配的速度。我感觉自己不得不花费所有的时间来寻找如何做事情。现在,几个月后,我感觉自己能够像以前一样快速开发。更重要的是,我知道各种范例,并且可以在面临类似之前解决过的问题时轻松地应用它们。我还正在建立一组可以重复使用的扩展、片段和组件。
我建议你给C#/.NET一个机会,足够长的时间来克服不可避免的早期困难,然后再决定是否技术本身有问题。

这正是我在ASP.net MVC中经历的情况,但对我来说,我仍处于“还不知道如何在MVC中实现”的阶段。 - dtc

1

你是否在尝试做一些不太常见的事情?大多数GUI开发人员都会遵循某种人机界面指南,以便他们的应用程序与所使用的操作系统的窗口管理器相适应。这有助于提高用户体验。大多数GUI元素都是根据这个原则设计的。因此,你可能正在尝试使你的界面与大多数界面截然不同,因此,你发现必须进行一些自定义工作。这是正常的。


为什么每个人都认为在控件上移除边框很奇怪,当鼠标悬停或它获得焦点时,我会将边框放回去。 只是在这个窗体上,当周围有一个框时,它看起来很糟糕。 - Tester101
我并不是在暗示这很奇怪,只是因为它可能不常见,所以没有内置的支持。 - NobodyReally
我可以理解如果我需要构建一个自定义控件,我对此没有任何问题。我只是不喜欢重新构建已经存在的东西。 - Tester101

0

这取决于你来自哪里。我发现C#非常有效。

我很少使用其他控件,因为它们通常不能完全满足我的用例,并且会在您的应用程序上创建依赖关系。

所以当你想要升级你的项目到C# 4,但是由于控件X、Y和Z在C# 4中不起作用...你就束手无策了。

所以我只是提前承担一些代价,编写自己的控件,这样以后就会少些烦恼。


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