草庐IT

c# - .NET 中的一切都是对象吗?

coder 2023-07-08 原文

请帮助我们解决关于“几乎”一切都是对象 的争论(an answer to Stack Overflow question As a novice, is there anything I should beware of before learning C#?)。我认为情况确实如此,因为 Visual Studio 中的所有内容至少都显示为结构。请发布一个引用,这样它就不会成为“现代傻瓜”(This American Life)。

请注意,这个问题指的是 C#,不一定是 .NET,以及它如何处理引擎盖下的数据(显然都是 1 和 0)。

下面是对“万物皆对象”的评论:

  • 嗯,不,不是。 – 二进制忧虑者
  • 我想要一个例子... – scotty2012
  • 不是一切都源自 基类型对象? – 细细的
  • 大多数事物都是对象... – Omar 库赫吉
  • 值类型、整数、 double 、对象 引用(不是它们的对象 self )等不是对象。他们能 被“装箱”以看起来像物体(例如 i.ToString()) 但实际上它们是 原始类型。将条目更改为 “几乎所有的东西都是一个对象”和 我将删除否决票 – 二进制 忧虑者
  • 感谢您的澄清。我 想想你能想到的最低水平 与 C# 中的 int 交互是 作为结构,哪个不是对象? - http://msdn.microsoft.com/en-us/library/ms173109.aspx – 细细的
  • Int32 不是继承自 ValueType 哪个继承自Object?如果是这样, 尽管有这种行为,一个 int 是一个 目的。 – 克里斯法默
  • 不,int 的盒装类型继承 来自 ValueType,它继承自 目的。它们不是对象 传统意义上,因为 a) 一个 int 不是对 int 的引用,它是 诠释。 b) 整数不是垃圾 集。如果你声明一个 Int32, 那么 int 是 4 个字节 堆栈,故事的结尾 – Binary Worrier

对象的定义:“对象”作为类 System.Object 的继承者与“对象”作为类型的实例与“对象”作为引用类型。”

最佳答案

这里的问题是这实际上是两个问题——一个问题是关于继承的,在这种情况下答案是“几乎所有”,另一个是关于引用类型与值类型/内存/装箱的问题,在这种情况下答案是是“否”。

继承:

在 C# 中,以下内容为真:

  • 所有值类型,包括枚举和可为 null 的类型,都派生自 System.Object
  • 所有类、数组和委托(delegate)类型都派生自 System.Object
  • 接口(interface)类型不是从 System.Object 派生的。它们都可以转换为System.Object,但接口(interface)只能派生自其他接口(interface)类型,System.Object不是接口(interface)类型。
  • 没有指针类型派生自 System.Object,也没有任何指针类型可以直接转换为 System.Object
  • “开放”类型参数类型也不是从 System.Object 派生的。类型参数类型不是从任何东西派生的;类型参数被限制为从有效基类派生,但它们本身不是从任何东西“派生”的。

来自 the MSDN entry for System.Object :

Supports all classes in the .NET Framework class hierarchy and provides low-level services to derived classes. This is the ultimate base class of all classes in the .NET Framework; it is the root of the type hierarchy.

Languages typically do not require a class to declare inheritance from Object because the inheritance is implicit.

Because all classes in the .NET Framework are derived from Object, every method defined in the Object class is available in all objects in the system. Derived classes can and do override some of these methods.

因此,并非 C# 中的每个类型都派生自 System.Object。即使对于那些类型,您仍然需要注意 reference types 之间的区别。和 value types ,因为他们的待遇非常不同。

拳击:

虽然值类型确实继承System.Object,但它们在内存中的处理方式不同于引用类型,以及它们如何通过代码中的方法传递的语义也不同。实际上,值类型不会被视为对象(引用类型),除非您通过将其装箱为引用类型来明确指示您的应用程序这样做。参见 more information about boxing in C# here .

关于c# - .NET 中的一切都是对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/436211/

有关c# - .NET 中的一切都是对象吗?的更多相关文章

  1. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  2. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

  3. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  4. ruby-on-rails - Rails 3 中的多个路由文件 - 2

    Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题

  5. ruby-on-rails - 按天对 Mongoid 对象进行分组 - 2

    在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev

  6. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  7. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  8. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  9. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  10. ruby - 如何模拟 Net::HTTP::Post? - 2

    是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

随机推荐