C#开发是否与您使用的IDE有效分离?


41

我是一名学习C#的Python程序员,他正努力消除烦恼,只是喜欢C#,而不是不断将其与Python进行比较。

我有一个要点:堆栈定义问题的详细说明,缺乏对事物定义位置的明确说明。简而言之:在C#中,using foo不会告诉您提供了哪些名称foo,这类似于from foo import *Python中的一种形式-在Python编码文化中不鼓励使用隐式而不是更显式的形式from foo import bar

对于C#程序员到此为止的Stack Overflow答案,我颇为震惊,这是在实践中,缺乏明确性并不重要,因为在您的IDE(大概是Visual Studio)中,您可以将鼠标悬停在名称上,并被告知名称来自的系统。例如:

现在,从理论上讲,我意识到这意味着当您使用文本编辑器进行查看时,您无法分辨出C#中的类型来自哪里……但是实际上,我认为这并不是问题。您实际上多久查看一次代码,却无法使用Visual Studio?

这是我的启示。许多Python程序员更喜欢使用文本编辑器进行编码,例如使用Sublime Text 2或vim之类的东西,这些都与代码有关,再加上命令行工具以及对文件夹和文件的直接访问和操作。依赖IDE来理解这种基本级别的代码的想法似乎令人反感。似乎C#文化在这一点上根本不同。而且我想知道我在学习C#时是否只需要接受并接受它。

这使我想到这里的问题:C#开发实际上与您使用的IDE密不可分吗?


7
Python是一种动态语言,C#是静态类型的(类似于Java),因此您在这两种语言中的编码方式都非常不同。
Oded 2012年

6
@Oded :using MyType = MyNamespace.MyType;
pdr 2012年

4
我不知道Python是什么样的,但是在C#中,您始终可以global::从那里开始并按自己的方式工作。using没有提供以前没有的任何东西;它只会使访问更容易(因为使用特定类所需的键入更少)。
CVn 2012年

5
“许多Python程序员更喜欢使用文本编辑器进行编码,使用Sublime Text 2或vim之类的东西,这些都与代码有关,再加上命令行工具以及对文件夹和文件的直接访问和操作。” -对我来说听起来简直是无效。IDE是可以帮助您提高生产力的工具。当然,您可以用锤子和手工锯盖房子,然后自己砍伐树木,但我想您可以使用一些电动工具和购买一些预切的木材,从而缩短砍伐时间。
安迪

2
@Andy-我可以这样听。但是,这些文本编辑器实际上非常强大,提供了大量的工具和程序员效率功能。与IDE(这可能或多或少适合某些语言/编程文化)相比,这是获取和使用这些工具和功能的根本不同方式。
Ghopper21

Answers:


26

Visual Studio非常方便,以至于在使用了一段时间之后,很难使用其他IDE。它有很多方便的工具和大量可用的插件,因此实际上它具有您需要的所有功能。

另一方面,无论您学习哪种语言,建议一开始都使用命令行,这样您可以更好地了解它的工作原理。C#也不例外。

C#开发实际上与您使用的IDE密不可分吗?

理论上不,但实际上是。可以使用文本编辑器和命令行用C#编写代码,但是如果您使用Visual Studio,则永远不会这样做。实际上,很少有程序员曾经从命令行执行过C#代码。

顺便说一句,如果您不方便使用using foo,可以在使用类型时使用整个路径。


9
SharpDevelop和MonoDevelop是Visual Studio的替代IDE。
Oded

@Oded,我从没使用过它们,但是很有趣。谢谢))
superM 2012年

谢谢superM-您能否提供使Visual Studio如此必不可少的各种功能?我知道它具有很好的代码完成功能,但是还有什么呢?它与Eclipse for C#差不多,还是C#开发人员所依赖的东西更具体?
Ghopper21

2
@ Ghopper21:我建议它比Eclipse更像IntelliJ(特别是当您包含Resharper时),除了在.NET世界中,社区插件通常是为Visual Studio编写的。
pdr 2012年

5
+1:我同意,尽管您可以使用记事本在命令行中编写代码,但您还是一个白痴,可以忽略VS或Sharp Develop带给桌面的工具。
Binary Worrier,2012年

33

依赖IDE来理解这种基本级别的代码的想法似乎令人反感。

这不是理解代码的问题:只要有足够的时间,您始终可以使用基本的文本编辑器甚至在打印输出中找到正确的变量。就了解代码而言,IDE依赖项绝对不存在。

有效地查找引用是完全不同的主题:我喜欢在Eclipse中查找Java变量的用法,就像我喜欢在Visual Studio中为C#和C ++查找声明点一样。我更喜欢花时间编码,而不是手动寻找声明点。这类似于数学运算:我可以在一张纸上乘以多位数字,但是我更喜欢使用计算器节省一两分钟。

从一定的代码“临界大小”开始,一个好的IDE变得非常有用,而与编程语言无关。大小可能因语言而异,但是一旦您跨越数千行,无论使用哪种语言,拥有IDE都会有所帮助。这与人的思维限制有关,而不是与特定的编程语言有关:在某些时候,您的短期记忆必然会“溢出”。

有一些技巧可以使您在IDE有用的地方增加关键尺寸。例如,您可以遵循一个命名约定(匈牙利名称在C ++世界中有时很重要,尤其是Windows实践者中)。另一个常见的技巧是this.即使在不需要这种限定的情况下,也可以限定实例变量。

这些技巧带有折衷:几乎不可避免地,它们通过掩盖名称或插入封装旨在隐藏的显式引用,使程序的可读性降低。面对这样的选择,我选择看起来干净的代码加上一个IDE,而不是看起来不太干净的代码减去IDE。但是,我完全认识到,其他人的选择可能与我的不同。


1
我可能应该说“快速阅读代码” ...对于我来说,在同一个源文件中没有所有的引用,而使用工具来查找这些引用是很不容易的事情。
Ghopper21

5
并不是说我不能选择this特质使用-但是编码不是孤立的艺术,我认为最好遵循(或至少从开始)编码文化的规范-即对Python和无论C#等效于什么“ C#方式”。从这里的答案和评论中可以清楚地看出,使用像Visual Studio这样的优质IDE是“ C#方式”的核心(如果这是正确的放置方式)。
Ghopper21年

3
@ Ghopper21您会遇到C#的事情不是不是没有IDE就不能编写它,而是绝大多数C#代码是用IDE编写的,并且所有开发人员都使用该IDE。这一事实与智能感知导致开发商联合落入谷歌存捕俘的研究有关于辐huffingtonpost.com/2011/07/15/... “根据研究的发现,人们访问谷歌庞大的网络指数不太可能在提示时回忆一个事实;但是,他们记得在网上找到该事实的位置和方式”
Jimmy Hoffa 2012年

2
@ Ghopper21我并不是说这个内存陷阱很糟糕,对于大多数人来说,它是生产力极大提高的源泉,这就是为什么只有那些记忆力很强的人,他们可以记住所使用的整个API的时候,才真正抱怨它。我只是指出这一点,因为这个事实直接影响您将阅读的C#代码以及C#开发的样式和文化。
吉米·霍法

1
我从来没有完全介绍过bios /低级别的dos API;但是我的第一种语言/环境是Borland TurboPascal;而且我大概一次记住了大约90%的语言/标准库。主要的例外与完全无法确定OO应该是什么有关。
丹·尼利

8

许多Python程序员更喜欢使用文本编辑器进行编码,例如使用Sublime Text 2或vim之类的东西,这些都与代码有关,再加上命令行工具以及对文件夹和文件的直接访问和操作。

很好,但是错过了VS IDE的要点。像VS这样的IDE的要点是通过强大的代码工具(如重构和智能感知)提供的快速开发支持。VS是C#代码的非常非常好的编辑器。

现在,C#使您可以在很大程度上依赖于其IDE的样式进行编码(您可以使用很多var关键字等)。有些人喜欢更明确,例如通过使用名称空间别名来明确类所属的名称空间(例如import在Java或Python中)。这不仅仅是语言的功能,更多是编码风格的选择。

由于C#是静态类型的(尽管从v4开始有一些动态扩展),所以总是很容易找出要引用的类型-如果输入错误,则代码将无法编译,而VS并不是唯一的IDE支持C#intellisense。虽然这可能是最好的。

在没有强大的IDE(例如VS)的情况下开发C#就像在已经拥有顶级射钉枪的情况下用手敲钉子一样-可能需要花很多时间才能做到,但是专业人员会使用正确的工具来完成工作。

我想说Java也是如此。如果有一个功能强大的IDE带有智能感知和代码重构工具,那么您可能应该使用它。

但是,从另一角度来看它-如果您不想要智能感知,编译时代码检查和代码分析/重构,那么a肿的IDE并非可行之选,静态类型的语言也不是。我认为这是相反的:

许多喜欢使用文本编辑器方法进行编码的程序员不能从静态类型的语言(例如C#和Java)中获得太多收益,因此,如果他们坚持使用诸如Python和Javascript这样的动态语言,可能会更好。

我认为:

  • 动态语言适合轻量级的工具(重量级IDE在这里带来的收益较小)
  • 静态语言适合功能强大的IDE(工具可以以灵活性为代价提供代码帮助)

+1为反引号。
fbmd

5

回答您的问题:尽管变化缓慢,但是Microsoft开发环境在很大程度上一直是单一文化

这种方法有很多优点和缺点,可以从长远来看(例如考虑开放式和封闭式平台(例如PC与Xbox)的利弊),但最终,微软提供的工具才是最重要的。人们使用。该公司还表明,他们的决策通常是一种“为我们的大多数用户提供最大价值”的过程,总是在寻求切实可行的折衷方案(最近-考虑使用Typescript)。因此,基本上,发现C#的开发已经/在考虑了工具(VS)的情况下不会感到惊讶。


顺便说一句,可以说Python也是它自己的单一文化,因为当时在编码风格和方法上坚决遵循所谓的“ Pythonic”,并且该语言的核心设计原则是采用一种显而易见的正确方法来做事。我倾向于认为从这种意义上讲,编程单一文化可能会很好,因为它创建了一个连贯的社区和可共享的代码。Python和C#文化如此……不同(只是太糟糕了?和/或有机会扩大我的思维?)!
Ghopper21

2
@ Ghopper21这是关于Python的一个很好的观点。我认为MS的“应该有一个单一的,明显的方法”版本扩展到了IDE的选择:)
Daniel B

4

首先,C#不是Python。有不同的设计方法。

现在,要回答您的问题,完全可以使用Python风格的using语句。

using FooBar=MyName.Foo.FooBar; 

只是这绝对不是规范,因为它并不是那么容易。但是,我认为您不必担心确切知道每个类的确切来源。我不明白在Python中用这种方法的全部意义。

而且,C#是一种非常适合使用IDE使其易于使用的语言。Intellisense的实现非常简单,特别是与Ruby和Python等动态语言相比。但是,您不必局限于IDE。我听说有人使用Eclipse。当然也有MonoDevelop(我经常使用),您甚至可以从命令行工作。有时,在服务器上,我将使用来编辑C#文件,vi然后使用xbuild来重建C#文件...只是,相比于典型情况下的命令行,使用IDE使事情变得容易得多。


4

有人在这里念书吗?

最后,我总结说非常复杂的IDE功能是必不可少的,并且有一天它将(应该)发展为Sublime VimNess的Zen。

我们的软件是大约2M LOC的129个项目。再加上.NET框架的庞大性,鉴于此,我可以说IDE至关重要,超越了该线程问题的动机。

深入了解代码库

期。您知道我们正在谈论的功能;除了它的便利性对于我处理的那种代码库而言是必不可少的和必不可少的。

由于使用了IDE,我编写了更好的代码。我总是在Nunit测试中添加自定义消息,因为它既简单,快速又准确。我更喜欢枚举而不是字符串,这在很大程度上归因于智能。我会毫不犹豫地使用描述性/长命名法-多行语句快速简洁地构成。

但是,即使这种机敏有时也太多了。我经常使用老式的“在文件中查找”文本搜索。

编码帮助

这是我经常哭“足够!”的地方。想象一下,一个满屏的屏幕上有十二种颜色,大部分都是晦涩的,在每个地方都突出显示了一些特定的变量,花括号突出了花括号的实际含义,到处都是弯曲的下划线,因为“​​它”要我写文献而不是代码,Resharper上下文菜单的图标(您自己只需单击它!然后大部分时间都忽略它),一个签名帮助弹出窗口,该弹出窗口水平跨越屏幕的2/3,垂直显示多个重载,一个弹出窗口是由于您刚好将鼠标光标留在哪里。甚至看不到我正在处理的代码的&^!%line * s *!

可见螺柱 需要拥抱极简主义,所以我可以专注于编码,而不必经历数百次(如果您将每个颜色编码设置以及所有这些插件都计算在内)数千个设置,而这将是一场理智的失败之战。一个“ 帕累托 ”键会很棒。


1
非常感谢您在这里的想法,因为您似乎真的从IDE和“ Sublime VimNess”方法的角度“理解了”。我在这里所说的一切都与你同在。希望它能通过。
Ghopper21

3

C#开发实际上与您使用的IDE密不可分吗?

当然不是。为什么不导入整个名称空间?使用集成IDE或文本编辑器的选择与此无关。导入整个名称空间不会使阅读或使用代码变得更加困难。

记住,C#是一种类型化的语言。如果导入多个具有相同类的名称空间,则会出现编译错误。

我个人在这两种方式中都不使用类型声明。相反var,出于此处在此说明的原因,我改用了关键字:http : //blog.gauffin.org/2012/08/to-var-or-not-to-var-is-that-really-the-question/


1
问题是阅读不写代码。(我在上面链接到的堆栈溢出问题给出了一个示例。)在阅读代码时,您如何知道某物的来源?使用Python,您可以查找明确的导入(假设代码遵循使用此类导入的强大Python约定)。对于C#,似乎已经达成共识,那就是实际上您使用的是VS之类的IDE。
Ghopper21

如果您不知道类的来源,则可能必须通过两种方式查找它的工作原理。只是谷歌msdn <classname>,然后单击第一个链接。在那里您也获得了名称空间。
jgauffin 2012年

这种方法体现了文化差异。并不是说Python程序员不会使用google的东西-当然他们会这么做-只是认为它与众不同的方式。
Ghopper21

另外,C#中的var是不错的语法制糖/编译器快捷方式,我喜欢这样做,以减少代码的冗长和重复。只是希望您可以在任何地方使用它,而不仅仅是内部方法。
Ghopper21

@ Ghopper21:是的,我知道。我的观点是,google对MSDN的索引很好,您可以通过这样做直接获得文档。因此,您实际上不需要通过包括指向它的整个路径来记录所使用的每个类。
jgauffin 2012年

1

我的理解是在Python中,“一切都是公共的”或类似的东西。在C#中,模块设计者决定什么是公共的,什么不是公共的,因此当您进行操作时,无论如何import您只会获得公共API。这可能是造成您所描述的差异的原因。


这绝对是Python与C#之间的巨大差异,但这并不能真正帮助我理解为什么导入中如此缺乏显式性。正如@pbr在其评论中指出的那样,Java(也具有公共/私有区别)在文化上偏​​爱显式导入方面与Python类似。
Ghopper21

5
@ Ghopper21-首选在Java(例如C ++)中进行显式导入的唯一原因是为了防止名称冲突。C#做出的设计决策,处理通过导入/类型别名这个问题,因为他们更好地处理当你真正拥有与不具有一堆样板进口弄乱源的益处沿着名称冲突。
Telastyn 2012年

1

C#开发实际上与您使用的IDE密不可分吗?

在我上一份工作中,我主要是使用vim来编写C#,JavaScript,Powershell,Perl,C ++等语言的代码,并且有很多开发人员过去常常做类似的事情。对于Visual Studio而言,该项目太大了。

也就是说,大多数C#开发人员都处理较小的项目,并且对使用VS非常满意。


0

这是有关C#开发的有趣观点。如果您要问有关IDE的问题,那么您要问的内容超出了C#。

就像您说的那样,在Python中,您可以使用各种编辑器来编写代码。您也可以使用.NET框架。您还可以使用其他IDE工具,例如SharpDevelop。Visual Studio与.NET框架紧密合作开发,并且相对昂贵。存在诸如SharpDevelop和VS的“ Express”版本之类的工具,以诱使更多的开发人员使用.NET。IDE实质上为您提供的是一个有组织的环境,通常提供智能感知,可提高生产率的附加组件和“帮手”来组装,最终可能会成为传递给编译器的非常吓人的命令行。对于Java同样如此,诸如Eclipse之类的工具只是为我们提供了组织和生产力上的增强。在幕后,除非您构建或编译项目,并且尊重您,否则任何神奇的事情都不会发生,

当您谈论C#中的“ using”语句并将其与Python进行比较时,实际上并不是同一回事。编译器使用using语句来帮助其将C#代码转换为MSIL。在MSIL中,没有“从此名称空间导入所有这些类”指令。当时间代码处于MSIL级别时,所有类均已标记有其完全限定的名称。这些“使用”和“导入”语句是为了帮助人们阅读。它们不是编译器优化命令。在完成所有这些初始的“全限定名称标记”之后,FQN可能会有一种低级的“最小化”,但这是为了帮助编译器/解释器更快地执行。

此处提到的所有这些语言之间的最后一个根本区别是,其中一些语言是由VM解释的,某些是JIT样式的解释,而某些是完全编译的。这些使用指令在这些编译器和解释器之间的实现方式差异很大。

HTH。


“这些'使用'和'导入'陈述是为了提高人类的可读性。” -是的,这是这里工作的主要哲学差异。文本级别的可读性是Python一阶设计的关键原则。C#并非严格需要,但实际上要依靠像VS这样的优秀IDE才能“可读”。顺便说一句,与C#中的“使用”不同,Python中的“导入”还不仅仅是关于可读性。
Ghopper21

0

我认为,从历史上看,答案是肯定的,是的-在Visual Studio,Xamarin或SharpDevelop之外的任何事物中启动C#开发并有效运行都是一种令人不愉快的体验。

但是最近出现了许多使它变得更容易的项目,例如:

OmniSharp以及vim,emacs,atom和sublime插件提供了智能感知和重构的基础。我实际上并没有使用过它,所以我不知道它的效果如何,但是看起来确实很有希望。

Yeoman ASP.NET MVC生成器,有助于引导新的MVC项目(也许存在其他生成器)。

paket,NuGet的替代品,您可以从命令行实际将NuGet软件包添加到项目中,并更新.csproj文件(尽管有NuGet命令行工具,但实际上更新项目以使用软件包是IDE的一部分)集成,而不是命令行工具)。

Paket的含义是您必须调整源代码以使用它-因此,如果您是团队中的一员,并且想使用文本编辑器进行编码,而其他所有人都使用Visual Studio,则必须说服所有人否则使解决方案适应您的需求:(

因此,您应该能够启动并运行,但是要使您的工具链高效启动和运行,还有相当多的工作要做。


-1

不再:

http://www.omnisharp.net/

OmniSharp是一系列开源项目,每个项目都有一个目标-为了在您选择的编辑器中实现出色的.NET开发。

说跨平台.NET很有趣。但是,有人在没有Visual Studio和Windows的情况下开发.NET是否合理?

在Sublime的Mac上进行.NET会很有趣吗?Ubuntu和Emacs?Windows和Atom?您可以使用编辑器PLUS获得出色的功能,例如Intellisense(不仅是自动完成功能),添加参考,格式化文档等等。在任何地方进行开发,在任何地方部署(以及到Azure!)

我已经用subime3和osx测试过

更多样品

http://blog.jonathanchannon.com/2014/11/12/csharp-first-class-citizen-sublime-text/


Omnisharp使C#可以与Sublime和emacs等文本编辑器一起使用。那么为什么要投票呢?
mamcx 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.