为什么 C# 和 Java 要求所有内容都放在一个类中?
似乎这个问题以前应该问过,但搜索什么也没发现。
我一直想知道,让我们把每一点代码都放在一个类或接口里有什么意义。我似乎记得,需要像C这样的函数有一些好处,但对于类来说却没有。在某种程度上,像Python这样的语言比Java更面向对象,因为它们没有基元,但你可以把代码放在任何你想要的地方。main()
这是对OOP的某种“误解”吗?毕竟,你可以像在C中一样编写过程代码并将其放在类中,但它不会是面向对象的。
似乎这个问题以前应该问过,但搜索什么也没发现。
我一直想知道,让我们把每一点代码都放在一个类或接口里有什么意义。我似乎记得,需要像C这样的函数有一些好处,但对于类来说却没有。在某种程度上,像Python这样的语言比Java更面向对象,因为它们没有基元,但你可以把代码放在任何你想要的地方。main()
这是对OOP的某种“误解”吗?毕竟,你可以像在C中一样编写过程代码并将其放在类中,但它不会是面向对象的。
我认为要求所有内容都包含在类中的目标是尽量减少您需要在语言中处理的概念的数量。在C#或Java中,你只需要了解对象模型(尽管它相当复杂)。但是,您只有具有类(对象)的成员和实例的类。
我认为这是一个非常重要的目标,大多数语言都试图以这样或那样的方式遵循。如果 C# 有一些全局代码(例如,允许在没有方法的情况下对启动代码进行交互式评估和规范),那么你将有一个额外的概念需要学习(顶级代码)。C#/Java的选择当然只是获得简单性的一种方式。Main
当然,这是否是正确的选择是一个问题。例如:
在函数式语言中,程序是使用类型(类型声明)和表达式构建的。程序的主体只是一个计算的表达式,它比带有方法的类简单得多,并且它还支持交互式脚本(如Python)。Main
在Erlang(和类似的语言)中,程序被构造为并发执行进程,其中一个主进程启动其他进程。这是一种截然不同的方法,但对于某些类型的应用程序来说,它很有意义。
一般来说,每种语言都有某种方式来看待世界并对其进行建模,并在查看所有内容时使用此观点。这在某些情况下效果很好,但我认为没有一个模型是完全通用的。这可能就是为什么混合多种范式的语言在今天非常流行的一个原因。
顺便说一句,我认为方法的使用是一些有争议的选择(可能继承自C / C++语言)。我认为更明确的面向对象解决方案是通过创建某个类的实例来启动程序。Main
Main
C#不是为“小规模编程”而设计的。相反,它是为面向组件的编程而设计的。也就是说,对于编程方案,其中团队正在开发相互依赖的软件组件,这些组件将随着时间的推移以多个版本发布。
强调大型编程,远离小规模编程,这意味着有时围绕小型节目有很多“仪式”。使用这个,类那个,主要废话废话,所有写“你好世界”。
属性“一行程序是一行长”在 C# 中会很好。我们正在考虑允许在小程序中的类外代码作为假设的未来版本的C#中的可能功能;如果您对此类功能有建设性的意见,请随时通过我博客上的联系链接将其发送给我。