C# 垃圾收集器在面向对象编程中的使用?

C# 垃圾收集器在面向对象编程中的使用?,c#,C#,我在读关于垃圾收集器的书。我想知道垃圾收集器在面向对象编程中有什么用途?我们也可以手动删除对象,而不是垃圾收集器。 然后我们产生了垃圾收集器,它的ceratin级别为N,N+1,N+2。它们真的如此重要吗?垃圾收集与面向对象编程无关 C#是一种托管语言。这意味着开发人员不必担心(至少不必担心)内存管理。这就是为什么垃圾收集器如此重要 我们也可以手动删除对象,而不是垃圾收集器 是的,我们可以——但这可能会让我们陷入严重的麻烦: GC的使用通常会显著缩短开发时间,但当使用它时,我们会遭受一些性能

我在读关于垃圾收集器的书。我想知道垃圾收集器在面向对象编程中有什么用途?我们也可以手动删除对象,而不是垃圾收集器。
然后我们产生了垃圾收集器,它的ceratin级别为N,N+1,N+2。它们真的如此重要吗?

垃圾收集与面向对象编程无关

C#是一种托管语言。这意味着开发人员不必担心(至少不必担心)内存管理。这就是为什么垃圾收集器如此重要

我们也可以手动删除对象,而不是垃圾收集器

是的,我们可以——但这可能会让我们陷入严重的麻烦:


  • GC的使用通常会显著缩短开发时间,但当使用它时,我们会遭受一些性能损失,特别是当涉及到。

    除非您编写的是不安全的
    代码,否则您无法在C#中释放内存。

    垃圾收集器和面向对象编程是完全不同的概念。您可能会混淆它们,因为许多OOP语言实现了某种形式的垃圾收集器

    垃圾收集是清理未使用的资源的过程,这意味着已经超出范围的对象,等等。它允许程序员不用担心(在大多数情况下)自己清理


    C#是一种托管语言,这意味着它实现了垃圾收集器,以及其他一些功能。

    这两个概念完全不相关

    你可以有一个而不是另一个。您可以删除垃圾收集语言中的对象,但无法回收内存。这是我使用过的所有语言的垃圾收集器的职责

    为了证明它们是完全不同的概念,这里列出了一个有/没有oop/gc的语言列表:

    垃圾收集器和面向对象:

    • C#
    • 爪哇
    • 无数其他
    面向对象,但不是垃圾收集:

    • C++
    垃圾收集,但不面向对象:

    • JavaScript*
    既不是垃圾收集,也不是面向对象:

    • C


    * JavaScript有对象,不是面向对象的,与C++和java相同。我会称之为基于原型的语言,而不是面向对象的语言。

    。。。?GC和OOP是正交的概念。你可以选择其中一个而不选择另一个。你读过关于垃圾收集的什么?你至少仔细阅读了吗?同时考虑阅读你的C标记,垃圾收集是为你完成的。您可以选择在调用之前使用称为“finalizer”的语法:“~”。对象引用的删除是在运行时之后和执行停止之前处理的,因此,除非您以某种方式编写不安全的代码,否则您不必担心处理暴露的内存。@Ben:GC与此完全不同。基本上,这就是保持记忆不被填满的原因。作为其工作的一部分,它调用终结器。但是终结器不是GC。@user1739035:您的问题是否特别关注C?还是关于GC的概念?为了正确回答您的问题,这一点很重要。我将区分删除对象和回收其内存以供进一步使用。您是否真的将Smalltalk包括在“非面向对象”类别中?它可能是两种实际发明OO的语言之一。@cHao,我之所以把它包括进来,是因为它对JavaScript的影响,但我不能说我对它的了解足够到可以这样或那样说。我猜它也是基于原型的,我认为不同的形式面向对象,但它是一个疯狂的猜测。“我只说JavaScript,就不说了。”赵先生,在维基百科上简单阅读一下就可以确认我错了。Javascript似乎是基于Self的,Self是基于Smalltalk的,但Self似乎引入了原型的概念。哦,“以班级为基础”!=“面向对象”。)可以有没有类的对象。事实上,我认为JS和其他语言一样是OO,考虑到原型和类在支持OOP背后的概念方面做得一样好。但事实上,我不想太深入地讨论这个问题。:)@赵,我通常使用OOP来指代基于类的范例。让那些手头有太多时间的人来决定确切的术语是什么。op从一开始就不太可能知道其中的区别。