【问题标题】:Why is C# tightly coupled to .Net? [closed]为什么 C# 与 .Net 紧密耦合? [关闭]
【发布时间】:2021-04-20 19:27:26
【问题描述】:

在 C++ 中,C++ 代码可以由编译器编译,也可以在 Platinum 等 C++ 框架中使用。我的意思是,您可以选择在没有框架的情况下独立运行 C++。同样的故事也适用于 python 和其他语言。但是来到 C# 世界,我认为(也许我错了)你别无选择通过编译器独立运行 C#;它与 dotNet 框架或单声道耦合。是否有其他语言的行为类似于 C# 并且需要其框架才能运行?还是只有 C# 才会这样?

【问题讨论】:

  • java(以及 clojure、kotlin、scala)、erlang/elixir 是类似的,它们在自己的运行时运行。
  • 你真的独立使用C++还是依赖标准库?
  • 那么在这种情况下,您可以将 .NET 视为 C# 的“标准库”,即使“.NET 框架”是一个东西,它只是一个姓名。在 Django 和 Flask 是外部库的意义上,它不是“外部库”。
  • 事情是这样的:.NET Framework(以及 .NET Core 和 Mono)不只是框架,它们也是运行时。考虑以与安装 Python 解释器相同的方式安装 .NET Core 运行时,两者都附带一组称为标准库的标准类和方法。然后有构建在这些运行时之上的框架,例如 ASP.NET。是的,它被称为 .NET Framework,但它并不是真正的框架

标签: c# .net architecture roslyn


【解决方案1】:

我认为这个问题有两个答案。

框架

我认为这只是一场口水战。

Python 有一个解释器,并带有“包含电池”,意思是一个大型标准库。默认包含的解释器和库是python的运行时环境

.NET 是 C# 的运行时环境。例如,它包括运行 C# 程序所需的虚拟机。

还请记住,框架只是一个术语,它被用于多个级别。例如,ASP.NET 也是一个框架,但它的含义与 .NET Framework 不同,它是另一个层次的框架。

Mono 不是 .NET Framework

指出这一点很重要。 mono 不是 .NET Framework,它是 C#与 .NET Framework 耦合的真实证明。

为什么 C# 不完全独立于 .NET?

C# 是作为 .NET 的一部分创建的。

【讨论】:

  • 感谢您的解释性回答。你说过一个不同层次的框架。你能解释一下吗?并举个例子。
  • ASP.NET 是一组用于构建网站的工具(也称为框架)。它在 .NET 上运行,这是一个运行应用程序的框架。有人可以构建一个框架来构建在 ASP.NET 上运行的互联网商店。另一个例子是 .NET 之上的 ADO.NET 之上的实体框架。
【解决方案2】:

我想知道我是否可以在没有 .Net 的情况下运行 C#。我想将框架概念与语言分开。

如果您查看 C# 规范 ECMA 334,您会看到它说:

尽管 Microsoft 的 C# 实现依赖于 CLI 来提供库和运行时支持,但其他 C# 实现则不需要,只要它们支持获得此 C# 标准所需的最低 CLI 功能的替代方法(请参阅附件 C)。

CLI(通用语言基础结构)基于 .NET Framework 的一个子集,正如标准所说,因此 C# 这种语言确实不依赖于 .NET。它仅依赖于“附件C”中列出的内容,您可以自己查看。

但是,Microsoft 的 C# 编译器,C# 语言的特定实现确实依赖于 .NET。

还请注意,仅包含附件 C 中列出的内容的 C# 不会很强大。我什至找不到 System.Console 那里的课程。我不认为仅使用附件 C 中的内容就可以编写任何实用程序,因此在实用层面上,是的,C# 确实非常依赖 .NET。

【讨论】:

  • 谢谢!还有一个问题!语言可以在没有标准库的情况下运行吗?或者是标准库中语言的所有语法。并且不包括标准库就什么都做不了。
  • @NaveedHematmal 在这个问题的上下文中,说 language 是否运行是没有意义的。 “语言”实际上只是一组规则和与这些规则相关的语义,是一种短暂的东西。 runnable 是语言的一些实现。例如,您可以编写一个程序,接收作为源代码的字符串,并输出一些数据,根据语言的规则和语义。您当然可以编写一个只有附件 C 中的那些东西的 C# 实现(最接近“没有标准库”)
  • 微软对C#的实现确实依赖于.NET框架,而Mono对C#的实现也依赖于Mono框架。另请注意,.NET 框架、.NET Core 和 Mono 都是另一个短暂事物的实现 - .NET Standard
  • @NaveedHematmal 等等,我想我在这里错误地使用了“短暂”。我的意思是无形的。
猜你喜欢
  • 1970-01-01
  • 2011-05-24
  • 2012-08-28
  • 2014-02-04
  • 2014-10-03
  • 2018-11-19
  • 2017-12-28
  • 2013-12-25
  • 1970-01-01
相关资源
最近更新 更多