或者我应该问一下,从C ++入手是多么的有用和有益
这看起来可能相当不错,但是对我来说有一些意义,也可能是像我这样的其他人。
我只是想知道,当你是一个.NET程序员的时候学习C ++,COM和ATL有多重要?
我喜欢用.NET和C#编程.Visual Studio只是具有自己的智能魅力,彩色编码和其他漂亮的function,这让我们沉迷其中。
我在想,我们几乎可以用C#构build任何东西,而且大多数情况下都是如此,但是它有时候像:
虽然我尝试创build一个shell扩展,但强烈build议使用非托pipe代码而不是任何托pipe代码。 还有其他一些东西,比如COM,ATL,它们更喜欢用C ++而不是C#编码。 我在IT行业只有4年时间,很喜欢成为解决scheme架构师。
所以需要你所有的投入,知道如果我正在做我的当前COM项目与C + +,与.NET UI集成是多么重要/有帮助的将来在我的未来风险。
在卫生保健,银行和电信这些常见领域,是否有C ++和.NET的实现?
这个问题(至少在你提到的特定情况下,比如shell扩展)试图“与.NET UI集成”是你真的不能这样做的。 在托管代码中编写外壳扩展不是一个好主意,原因是给定的进程只能在任何给定时间加载一个版本的CLR。 如果两个外壳扩展依赖于CLR的不同版本,并且它们都尝试同时加载,则会失败。 你不能以任何形式加载CLR在你的shell扩展的上下文中的形式和形式,并且是一个行为良好的shell扩展。
我的建议是,除非你真的有理由去学习C ++,否则不要打扰C ++(尽管C ++是我最喜欢的语言)。 但是当你学习C ++的时候, 把你的.NET包放在门外 。 有很多事情(如过度使用铸造,不断使用new
等),这是惯用的C#,并在C + +只是错误的 。 如果你不试图从CLR的角度来理解C ++概念,那么你会感到很开心,因为C ++没有在那里运行。 您可以使用您为C#学到的一些设计模式,但是底层语言和机器在两种语言之间的运行方式是完全不同的。
对于新的C或C ++程序员来说,最令人困惑的区别可能是未定义行为的概念。 C和C ++标准是用这样一个mannar编写的,不被绑定到特定的机器上。 这与Java或.NET等体系结构形成了鲜明的对比,在这种体系结构中,语言实际上是以虚拟机的形式定义的(因此非常依赖于虚拟机)。 这导致标准字面上不会说出程序正确输出的地方; 而是说“但是底层机器通常会这样做”。 如果你处理浮点数学,你可能会注意到这一点。 尽管C#对浮点数的计算方式和四舍五入有着严格和具体的规定,但C和C ++没有这样的限制。
一旦你理解了C ++,那么你可以继续到COM和ATL。 COM本质上是设计用于以一种语言(COM ABI),机器(在同一个系统上的32位和64个进程之间编组等等)以及位置(DCOM提供RPC设施)的独立方式来访问类似于C ++的类结构。 如果您不了解C ++对象模型,那么COM对象模型将会非常困难,因为这两者非常相似。 ATL是一套围绕着COM基础的C ++类模板,它只是为你处理一些样板文件。
我只是想知道,当你是一个.NET程序员的时候学习C ++,COM和ATL有多重要?
取决于你做什么。 你对数据库的学习更好。 几乎每一个严重的应用程序使用数据库。
但是C ++与.NET一起使用 – 特别是C ++ / CLI(托管变体),因为它非常适合将C ++代码与托管代码有效地结合在一起。 通常几乎是唯一有效的方法。 举例来说,如果您为市场数据筹集活动,这一点非常重要。 频率超过10.000次。 每秒。
但是这是一个NICHE。 我在金融领域工作,C ++使用AND集成的用途比在.NET /在应用程序中工作的人员要小。