我没有任何争论反对为什么我们只需要一个通用类。但是为什么我们没有两个通用类,比如一个Object和一个AntiObject类。 在自然界和科学中,我们发现了二元性的概念 - 如能量和能量。暗能量;男性和女性女; Plus&减去;乘以&划分;电子与电子质子;整合&推导;在集合论中。有很多二元论的例子,它本身就是一种哲学。在编程本身,我们看到反模式可以帮助我们执行工作,与我们使用设计模式的方式形成对比。 我们称之为面向对象的编程。这是一个限制因素还是我在理解编程语言的形成时缺少一些基本的东西?
编辑: 我不确定,但这种二元性概念的用处可能在于创建垃圾收集器,这些垃圾收集器创建与自由或松散对象相结合的AntiObjects来破坏自身,从而释放内存。或者可能是AntiObjects与Objects一起工作以创建一个自我修改的编程语言 - 这允许我们创建一个安全的自修改代码,使用遗传编程进行进化计算,隐藏代码以防止逆向工程。 我已将此问题移至Stack Exchange的计算机科学网站,因为这被认为是偏离主题的。如果您想评论/回答这个问题,请使用它。
答案 0 :(得分:4)
继承树通常(就像它在C#中一样)是一棵树,只有一个根,出于多种原因,所有这些似乎都会导致一个大的:
void *
这样的东西,因为它抛弃了任何“类型”的概念,这将是可怕的)。全能,将一种类型作为层次结构的根目录更为简单。它允许您创建适用于系统中每个对象的契约/保证/等,并且对希望能够以通用方式处理对象的代码提出更少的要求。
C ++因多个根类型而失败,因为(1)C ++允许多重继承,因此对象可以弥合继承树之间的差距; (2)它有模板(远远超过远比泛型更能使用任何类型的对象); (3)它可以通过诸如void *
之类的方式完全抛弃和回避任何“类型”的概念; (4)它不提供为您管理和收集您的物品。
C#不希望多重继承和模板的所有复杂性,并且它想要垃圾收集。
答案 1 :(得分:2)
在自然界中,如果在一个家庭中有两个孩子完全不同并且彼此相反,他们仍然有共同的父母。
您提供的所有这些示例都属于同一类别。对于例如男性和女性属于Homosapiens类别。 Plus和Minus属于运营商类别。
在OOPS中也有两种类型。引用类型和值类型,但它们都属于对象。
你的建议也很好。但是让我们在宇宙中暂时接受你的建议。仍然会有一个包含Object和AntiObject类的Super_Class
。所以它必须停在某个地方,并且在OOPS中object
是停止的那个类。