强类型-C#是强类型语言还是弱类型语言

本文关键字:类型 型语言 -C# 强类型 | 更新日期: 2023-09-27 18:00:12

有人能澄清C#是强类型语言还是弱类型语言吗?并解释原因。

如果我有一个名为concat的函数,它可以接受任何对象,那么这被认为是弱类型的吗?

function concat(Object stuff)
{
   //do something here to stuff
}

强类型-C#是强类型语言还是弱类型语言

来自http://ericlippert.com/2012/10/15/is-c-a-strongly-typed-or-a-weakly-typed-language/

C#是强类型语言还是弱类型语言

是的。

那是没有帮助的

我不怀疑。有趣的是,如果你把这个问题改成"answers"问题",答案是一样的。

什么?你的意思是,C#是强类型语言还是弱类型语言

是的,C#是一种强类型语言,也是一种弱类型语言。

我很困惑

我也是。也许你应该准确地告诉我你的意思"强类型"answers"弱类型"。

嗯。我真的不知道这些术语是什么意思,所以也许这就是我应该问的问题。这到底意味着什么一种语言是"弱类型"还是"强类型"

"弱类型"表示"该语言使用类型验证系统我觉得很反感",而"强类型"的意思是"这种语言

C#是强类型的。

ECMA-334将C#定义为"C#(发音为"C Sharp")是一种简单、现代、面向对象和类型安全的编程语言。"

维基百科定义类型安全

类型安全是强的众多定义之一的同义词打字;但是类型安全和动态类型是相互兼容的。

维基百科将强类型定义为

在计算机科学和计算机程序设计中,一种类型系统被称为在指定一个或多个限制时具有强键入功能涉及不同数据类型的值的操作混合。强类型的反面是弱类型。

也许最好问问C#是否是一种类型安全的语言,因为如果编译器进行类型检查,没有人能就"强"answers"弱类型"的真正含义达成一致。

C#确实有一些类似动态语言的结构可用,但值得注意的是,这些结构在编译时仍然是类型安全的。

从Visual C#3.0开始,在方法中声明的变量作用域可以具有隐式类型var。隐式类型的本地变量是强类型的,就像您声明了类型一样您自己,但由编译器决定类型。

http://msdn.microsoft.com/en-us/library/bb383973.aspx

dynamic关键字的工作方式基本相同,只是它是在运行时计算的,而不是像var那样在编译时计算。

Visual C#2010引入了一种新的动态类型。类型为静态类型,但是dynamic类型的对象会绕过静态类型检查。在里面在大多数情况下,它的功能就像有类型对象一样。在编译时假定类型为动态的元素支持任何操作。

http://msdn.microsoft.com/en-us/library/dd264736.aspx

通常:C#是以强类型的方式使用的,的意思是,变量声明为特定的Type(字符串、int、用户定义的类型等),以后不能分配其他类型的值。

例如:在C#中不能有以下内容:

int i = 10;
i = "ten";

正如下面的注释所示,C#可以有不同的用法。

使用"strong"类型可以让编辑器/编译器提醒您错误,并让编辑器根据您可能需要的内容向您提供建议。

强类型和弱类型的定义有很多,以至于你需要在使用它时定义你所说的术语的含义。我觉得有用的一个定义是"语言会强迫我为参数之类的东西指定类型吗?"这将C#和Javascript之类的语言分在一边,我觉得这一区别很有用。

要求某人命名一个类型,而不是依赖于"鸭子类型"之类的东西,这在静态分析中有好处,但在指定共享公共功能的类型时有缺点。出于这个原因,这些语言中的许多都发展出了复杂的类型关系规范系统,通常首先是基于类的编程,然后是复杂的模板系统或推理系统

这是一篇关于这个主题的博客文章,作者是C#编译器的主要开发人员之一。

简而言之,这个问题本身是有缺陷的,以目前的形式无法合理回答。

根据MSDN,C#是一种强类型语言。