Language agnostic 不';强制转换的能力不能满足类型化变量的目的吗?

Language agnostic 不';强制转换的能力不能满足类型化变量的目的吗?,language-agnostic,programming-languages,strong-typing,Language Agnostic,Programming Languages,Strong Typing,所以,我是在假设我们有打字语言的情况下工作的,因为我们会犯很多错误。。。因此,键入是让编译器为我们做大量检查并帮助我们解决问题的一种方法(如果我的假设不正确,请告诉我) 然而,如果我们将强制转换引入到类型化语言中,难道我们不重新引入我们在无法键入变量时遇到的大多数问题吗 我也知道我的假设不是我们输入变量的唯一原因。请分享我们使用打字语言的一些其他原因 因此,打字是一种获得 编译器为我们做了很多检查,并且 帮我们一点忙 对 但是,如果我们将铸造引入到 类型化语言,我们不重新介绍吗 我们遇到的大多数

所以,我是在假设我们有打字语言的情况下工作的,因为我们会犯很多错误。。。因此,键入是让编译器为我们做大量检查并帮助我们解决问题的一种方法(如果我的假设不正确,请告诉我)

然而,如果我们将强制转换引入到类型化语言中,难道我们不重新引入我们在无法键入变量时遇到的大多数问题吗

我也知道我的假设不是我们输入变量的唯一原因。请分享我们使用打字语言的一些其他原因

因此,打字是一种获得 编译器为我们做了很多检查,并且 帮我们一点忙

但是,如果我们将铸造引入到 类型化语言,我们不重新介绍吗 我们遇到的大多数问题都没有解决 能输入变量吗

你应该尽可能地避免,但有时你仍然需要做脏活

当然,有很多语言不强制执行严格的打字,也有很多人喜欢这些语言并用它们完成有用的工作

因此,打字是一种获得 编译器为我们做了很多检查,并且 帮我们一点忙

但是,如果我们将铸造引入到 类型化语言,我们不重新介绍吗 我们遇到的大多数问题都没有解决 能输入变量吗

你应该尽可能地避免,但有时你仍然需要做脏活


当然,有很多语言不强制执行严格的类型,也有很多人喜欢这些语言并用它们完成有用的工作。

是的,强类型允许编译器为您执行大量检查


不,允许施法并不能阻止它的用处。关键是,在很少的情况下,当你需要做演员,这是明确的。程序员必须做出一个决定,使演员可以小心。Casting是一个有用的工具,与许多功能强大的工具一样,它应该小心使用。

是的,强类型允许编译器为您执行大量检查


不,允许施法并不能阻止它的用处。关键是,在很少的情况下,当你需要做演员,这是明确的。程序员必须做出一个决定,使演员可以小心。铸造是一种有用的工具,与许多强大的工具一样,它应该小心使用。

底线是强类型让编译器为您检查内容强制转换让您在必要时覆盖强类型。底线是强类型让编译器为您检查内容强制转换允许您在必要时覆盖强类型。

强制转换时,您明确要求编译器放松其其他强类型。这允许您在99%的情况下进行编译时检查,但在绝对必要时仍然混合类型

无论如何,编译器有可能在编译时找到“坏”类型转换——这些类型转换永远不会成功


所以说启用强制类型转换否定了强类型输入的好处是错误的。但是,这可以说是过度使用了强制转换。

当您强制转换时,您明确要求编译器放松其其他强类型。这允许您在99%的情况下进行编译时检查,但在绝对必要时仍然混合类型

无论如何,编译器有可能在编译时找到“坏”类型转换——这些类型转换永远不会成功

所以说启用强制类型转换否定了强类型输入的好处是错误的。但是,这可以说是过度使用了铸造。

我要说的是“基本上没有。”

如果必须进行显式转换,那么仍然可以避免动态类型化带来的大多数问题。您的方法仍然需要存在于新类上。对象之间仍然必须具有某种层次关系

能够将XmlTextReader强制转换为TextReader和能够在运行时确定reader有一个名为“read”的成员(可能是布尔成员,也可能是方法)之间有着天壤之别。

我要说的是“绝大多数情况下都是否定的。”

如果必须进行显式转换,那么仍然可以避免动态类型化带来的大多数问题。您的方法仍然需要存在于新类上。对象之间仍然必须具有某种层次关系


将XmlTextReader强制转换为TextReader与在运行时确定reader有一个名为“read”的成员(可能是一个布尔值,也可能是一个方法)之间有着天壤之别。

键入还允许Visual Studio Intellisense等工具工作,这对提高生产率有很大帮助


但除此之外,迈克B是对的。有时候,你只需要做一些肮脏的事情,比如将接口转换为类,或者渴望int。

键入还允许Visual Studio Intellisense等工具工作,这对提高生产率有很大帮助


但除此之外,迈克B是对的。有时候你只需要做一些肮脏的事情,比如把接口转换成类,或者渴望int。至少在Java中是这样,不是这样。你只能向你所期望的班级的孩子施压。因此,如果类返回RuntimeException,则不能将其强制转换为字符串,也不需要强制转换以将其作为异常(其父级)访问

您只需将其转换为您知道这实际上是RuntimeException的子级/实现,并且您需要访问该子级知道的RuntimeException不知道的内容

也就是说,太多的铸造是一种糟糕的OO气味。您应该几乎完全通过父级的公开方法访问子级的唯一代码——如果您发现自己正在使用