在不知道C的情况下开始学习C#?

是否可以直接跳到C#,只知道一点C(只是一些基础知识),甚至可能不知道C?

如果您的目标是学习您的第一语言,并且您不会成为一名认真的程序员,那么请务必学习您将要使用的语言。

如果你要成为一名认真的程序员,你真的应该在某个时候熟练使用C语言。 我不知道哪种方式会更难,从C#开始或以C开始。无论何时接近,C都将具有挑战性。

如果您已经了解某些语言,而不是C或C#,请立即使用C#并稍后选择C.

关键是C是一种更简单的语言,但要在其中完成重要的事情需要更复杂的结构。 在C#中你很容易做的一些事情在C语言中会很困难,尽管C语言是更广泛和通用的语言。

C#和C非常不同,它们共享语法,但编程风格却截然不同。 它不会伤害学习C,但如果你的目标是C#,那么就开始吧。

学习C将教你更多关于计算机如何工作的知识,并给你一个低级别的理解。 C#是一种高级语言,具有较低的学习曲线以获得图形界面。

Joel和Jeff经常讨论学习C的价值, stackoverflow播客#2就是一个例子

是的,C编程语言不是学习C#的先决条件。 知道一些C肯定会帮助你快速掌握C#语法,但除此之外几乎没有相似之处。

当然。 C#从C语言中借用了语义约定,但当然没有必要去学习它。

实际上,您将跳过尝试使用C#的阶段,就好像它是C.

当然。 C#使用类似C的语法,但我认为你会发现它比C更容易学习。

我将在这里重复很多答案,但我想以比其他人所说的更具体的方式说些什么。

我认为将C#或任何其他面向对象的语言作为您的第一语言跳转是完全正常的。 事实上,很多人认为,如果你想要擅长OO,那么OO语言应该是你的第一语言,因为你不会陷入程序性思维。

话虽这么说,那些没有至少一个体面的工作心理模型的优秀程序员,对于正在发生的事情而言,却很少见。 这意味着,最终你应该学习计算机如何管理内存,指针,CPU如何执行指令等等……最后通过C书和汇编书阅读恕我直言。 我认为你不需要精通任何一个; 您只需要对计算机和编程语言的工作方式有基本的了解。

虽然C是一般学习的好语言,但我不相信你会得到任何有助于你学习C#的具体知识。

我的问题是你是否想选择第一语言来学习编程? (C#是一个选项)还是你知道另一种语言,并认为你可能需要在C#之前学习C语言?

如果你不是想学习编程,那么我会说你可以跳过C并直接进入C#。 但对于第一语言,我不建议。 尝试使用可以快速编写代码的脚本语言。

是。 当我开始使用C#时,我对C没有经验。

许多新程序员没有提到的一件事是他们想要做什么? 你想做一些像hello world这样简单的东西吗? 或者您是否希望制作更复杂的内容,如GUI应用程序或video游戏?

这一点很重要的原因是并非每种编程语言都适用于每项任务。 正如其他人所提到的,C是一种出色的系统和驱动程序语言(或者实际上需要低级接口或极端性能的任何东西),而C#旨在构建从文本编辑器到大型多层企业解决方案的桌面应用程序。 尽管有这些语言的名称,但它们实际上只是共享一个相似的名称和一些共同的语法。

我建议从C#开始并保存C以供日后使用。 您可以使用许多免费工具(如Visual Studio Express C#)快速开始工作。 如果以后你想开始研究像Linux内核,编译器或硬件驱动程序这样的东西,你可以快速拿起C.C仍然是值得学习的语言。

是的,这很好。

这当然是可能的。

了解其他语言总是有帮助的 – 只是因为你已经接触到了编程思维方式 – 但并非必不可少。

像我一样,如果你急于学习新语言,请直接进入。但如果你有很多时间(学生),我想每个想要被称为编码员的人都应该知道C.

当然! C#是一种比C更高级的语言,它为您处理了很多细节。

但有一个建议是,C#是一种非常好的语言,但它的学习曲线比VB.NET略显陡峭。 VB.NET 不是 Visual Basic,它只是承载了一些语法。

VB.NET的语法和关键字更容易学习,然后可以轻松地转换为C#。 除了特殊情况之外,一种语言可以做的事情很少,另一种语言无法做到,而且由于VB.NET更容易学习,所以我非常支持将它用作“欢迎使用.NET”语言。


只是为了澄清:你不应该将“经典”VB的耻辱带到VB.NET,VB6和VB.NET是完全不同的语言和框架,只有表面上的相似之处。

VB.NET为新开发人员提供了一些细节:

  • 让我挑剔的语法。 C#可以让一个绿色的开发者拉出他们的头发,因为他们忘记了()在空白上,或者将它们添加到属性中。
  • Visual Studio提供有关不可编译代码的快速反馈
  • VB.NET在C#使用符号的地方使用单词。 在下面的例子中,不是C#希望你知道“:”意味着“inheritance”或“实现”取决于后面的参数,VB.NET说“inheritanceMyBaseClass”和“实现INamedObject”,这更加直观

公平地说,我对VB.NET的默认代码模板有一个主要的抱怨 – 它们顶部没有“Option Strict On”和“Option Explicit On”语句。 如果你进入VB.NET,一定要将它们添加到每个类中,它们会让编译器进行更主动的错误检查,从而产生更高质量的代码理解.NET的类型系统

提供用C#和VB.NET编写的等效.NET代码的示例:

C#

 interface INamedObject { string Name { get; set; } } abstract class MyBaseClass { void PrintType() { Console.WriteLine(this.GetType().Name); } } class MyConcreteClass : MyBaseClass, INamedObject { public MyConcreteClass() : base() { } public string Name { get; set; } } 

VB.NET

 Option Strict On Option Explicit On Interface INamedObject Property Name() As String End Interface MustInherit Class MyBaseClass Sub PrintType() Console.WriteLine(Me.GetType.Name) End Sub End Class Class MyConcreteClass Inherits MyBaseClass Implements INamedObject Public Sub New() MyBase.New() End Sub Private _Name As String Public Property Name() As String Implements INamedObject.Name Get Return _Name End Get Set(ByVal value As String) _Name = value End Set End Property End Class 

如果你不是一个受过教育的OOP程序员,可能最好避免使用C(甚至是C ++),除非你是自我厌恶的忠实粉丝。 所有其他声明的原因都是有效的,但请记住,C#也是可管理的(看起来那样),因此更难以解决’麻烦’

我回答所有forms的问题“我应该学习X或Y语言吗?我应该在Y之后学习Z和Y之后的X吗?” 等是一样的:不要担心这样的问题。 忘记他们。 如果您认为学习C#现在会更有用(也许有更多的工作,或者您想加入一个项目,或者您只是好奇),那么请坐下来开始学习。

如果你已经擅长一种语言,那么就不需要花太多时间来学习另一种语言,看看你是否能够高效地使用它。 并且,你无法决定是否应该花费大量时间学习一门语言而不熟悉它。 因此,如果您愿意,可以开始学习C#。

为了使这有点极端,我认为,大约30年前,我学习Z80组装的事实,甚至在学习BASIC之前,我一直在帮助我。 但是,在你掌握了assembly之前,我绝不会建议你不要学习任何其他语言。 (顺便说一句,我记得的是操作码0xc9是RET )。

所以,开始学习C#。 如果你很好奇,继续学习C,一直记住即使两个都有花括号,它们也是截然不同的语言。 就像C和C ++一样。

这应该不是问题。 只要你掌握面向对象的编程,你就好了。

学习C或C ++会比较困难,但你可能会对基础知识变得更加习惯,这从来都不是坏事。

话虽如此,我不确定“可取”,但它不会“错”……更多的是偏好问题。

我发现学习大多数OOP的Java最有利于学习C#,因为它们在库和语法方面几乎相同。

只有当您开始深入了解C#等非托管代码等领域时,才能了解C或C ++。

C ++和C#之间的相似之处在词法分析器中结束。

不妨阅读K&R的“ C编程语言 ”,因为它是一个快速阅读,它将为您提供一个背景,可以帮助理解垃圾收集语言中幕后的性能。

当然C#更容易理解。 当然,对C的了解会有所帮助,但如果你不了解C,那么最好从C#这样的高级语言开始。