ojbect是引用类型?

问题描述

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceConsoleApplication3{publicclassTest{publicvoidMyTest(objectobj){obj=1;objectobj2=MyTest2(obj);Console.WriteLine(obj.ToString());Console.WriteLine(obj2.ToString());}publicobjectMyTest2(objectobj){obj=2;returnobj;}}classProgram{staticvoidMain(string[]args){Testtest=newTest();objectobj=null;test.MyTest(obj);Console.ReadLine();}}}我原来以为object是引用类型,但结果是12有点不理解,懂的请解释一下.

解决方案

解决方案二:
一点问题都没有,你认为哪里不合理?
解决方案三:
结果就是1,2啊任何类型都可以转换成object类型,包括简单类型
解决方案四:
我曾经也蛋疼过..publicvoidMyTest(objectobj){obj=1;objectobj2=MyTest2(obj);Console.WriteLine(obj.ToString());Console.WriteLine(obj2.ToString());}publicobjectMyTest2(objectobj){obj=2;returnobj;}

obj=2;这步其实是obj=newObject(2);//虽然不能这样写,但意义就是这样..它会在堆上新建1片地方保存2这个值..obj存的是这个实例的引用..你仔细想象也明白啊..publicclasstest{publicstringname{get;set;}}testt1=newtest(){name="123"};testt2=t1;t2.name="456";这时2个的name都一样..而你是obj=2;你自己体会下吧
解决方案五:
的确是引用类型,obj2=MyTest(obj1)这里返回2,所以输出2是没问题的知道你的疑问在于obj1为什么还是1?publicobjectMyTest2(objectobj){obj=2;returnobj;}上面这个方法,改变了局部变量的值,但传进来的参数,实质只是obj1的一个引用复本,obj=2;只是对这个引用复本重新赋值了,而obj1本身变不会有任何变化(无论是引用类型还是值类型)
解决方案六:
引用3楼lyj224170707的回复:

我曾经也蛋疼过..这步其实是obj=newObject(2);//虽然不能这样写,但意义就是这样..它会在堆上新建1片地方保存2这个值..obj存的是这个实例的引用..你仔细想象也明白啊..publicclasstest{publicstringname{get;set;}}testt1=newtest(){name="123"};testt2=t1;t2.name="456";这时2个的name都一样..而你是obj=2;你自己体会下吧

不是在赋值时新建,而是objectobj2=MyTest2(obj)调用的时候,传入的obj就只是obj1的一个引用复本为了描述方便,MyTest1中的obj当作obj1obj和obj1引用的都是1(装箱了),在MyTest2内部,那个局部变量obj就跟obj1没有一点关系了
解决方案七:
当然是信用类型,没啥好说的
解决方案八:
object是引用类型,但是int不是,object接收int发生装箱,反之发生拆箱。引用的是那个箱,倒腾一遍,int还是int。明白了么?
解决方案九:
3楼的说法很到位我只补充一句:string也是引用类型,object跟string的实现是差不多的,明白了么?
解决方案十:
这个跟数组不同如果定义int[]a=newint[4];那么在函数里修改a[0]的时候,改的是被引用的值,而不是a本身的指向而string和object在重新赋值的时候,指向也变了
解决方案十一:
数据类型之引用类型的使用//所谓引用类型=类类型=接口类型=数组类型=委托类型//引用类型的使用classProgram{classC//创建一个类C{publicintValue;//声明一个公共int类型的变量Value}staticvoidMain(string[]args){intv1=0;//声明一个int类型的变量v1,并初始化为0intv2=v1;//声明一个int类型的变量v2,并将v1赋值给v2v2=927;//重新将变量v2赋值为927Cr1=newC();//使用new关键字创建引用对象Cr2=r1;//使r1等于r2r2.Value=112;//设置变量r2的Value值Console.WriteLine("Values:{0},{1}",v1,v2);//输出变量v1和v2Console.WriteLine("Refs:{0},{1}",r1.Value,r2.Value);//输出引用类型对象的Value值Console.ReadLine();}}
解决方案十二:

解决方案十三:
这是一个对象啊

时间: 2024-07-29 01:54:39

ojbect是引用类型?的相关文章

.NET中的六个重要概念:栈、堆、值类型、引用类型、装箱和拆箱

内容导读 •概述 •当你声明一个变量背后发生了什么? •堆和栈 •值类型和引用类型 •哪些是值类型,哪些是引用类型? •装箱和拆箱 •装箱和拆箱的性能问题一.概述 本文会阐述六个重要的概念:堆.栈.值类型.引用类型.装箱和拆箱.本文首先会通过阐述当你定义一个变量之后系统内部发生的改变开始讲解,然后将关注点转移到存储双雄:堆和栈.之后,我们会探讨一下值类型和引用类型,并对有关于这两种类型的重要基础内容做一个讲解. 本文会通过一个简单的代码来展示在装箱和拆箱过程中所带来的性能上的影响,请各位仔细阅读

值类型与引用类型(中)

本文将介绍以下内容: 类型的基本概念  值类型深入 引用类型深入 值类型与引用类型的比较及应用    1. 引言 上回[第八回:品味类型---值类型与引用类型(上)-内存有理]的发布,受到大家的不少关注,我们从内存的角度了解了值类型和引用类型的所以然,留下的任务当然是如何应用类型的不同特点在系统设计.性能优化等方面发挥其作用.因此,本回是对上回有力的补充,同时应朋友的希望,我们尽力从内存调试的角度来着眼一些设计的分析,这样就有助于对这一主题进行透彻和全面的理解,当然这也是下一回的重点. 从内存角

JAVA 【引用类型】和【对象类型】在【继承】中的异同

介绍     JAVA [引用类型]和[对象类型]在[继承]中的异同,这个问题自己整理过N次,也被人当菜鸟问过N次.所以,在此简单整理一下,以供大家分享. 在继承关系中,一般成员变量是根据引用类型 在继承关系中,静态成员变量是根据引用类型 在继承关系中,一般方法是根据对象类型 在继承关系中,静态方法是根据引用类型 注意     静态成员变量,静态方法是基于类的,本文为了测试观察,所以,会用对象去引用静态成员变量和静态方法.      Super Class: package shuai.stud

C# 引用类型、值类型

CLR支持两种类型:引用类型和值类型,它们的区别是在内存分配方式上的差异:引用类型是从托管堆上分配的:值类型是在线程栈上分配的.而CLR的垃圾回收是针对托管堆的,因此值类型不受垃圾回收器的控制. 在FCL中,所有称为"结构"(struct)的类型都是值类型,所有称为"类"(class)的类型都是引用类型.所有的Struct都直接派生自抽象类System.ValueType,而System.ValueType直接从System.Object派生.所有的枚举都直接从Sy

C#高级编程阅读笔记一(关于值类型和引用类型)

笔记|编程|高级 数据在内存中的存储位置,取决于它的数据类型,在C#中,分为值类型和引用类型,值类型的数据存储在内存中的堆栈中,每个变量或程序都有自己的堆栈,不可以共用一个堆栈地址.当数据一个值类型的变量传递到另一个相同类型的变量时,会在堆栈中分配两个不同的地址. 而引用类型的数据存储在内存中的堆中,可以不同的变量或程序共同使用同一个位置的数据.当数据从一个引用类型的变量传递到另一个相同类型的变量时,只是把这个变量的引用地址传递给新的变量,同时引用当前堆中存储的数据. 可以通过实例得到详细结论:

C#的引用类型

C#的另一大数据类型是引用类型."引用"这个词在这里的含义是,该类型的变量不直接存储包含的值,而是指向它所要存储的值.也就是说,引用类型存储实际数据的引用值的地址.C#中的引用类型有四种: ●类 ●代表 ●数组 ●接口 我们将在这里介绍前三种引用类型(请访问以下链接),而把对接口的深入进述将放在第十五章进行. 4.2.1 类 4.2.2 代表 4.2.3 数组

C#基础(四)(C#预定义值类型和引用类型)

一.预定义类型. 1.值类型和引用类型 C#中的数据类型,可以分为值类型和引用类型,值类型存储在堆栈上,而引用类型存储在托管堆上. 如下代码示例, int i=10; int j=i; i和j的值都是10,并且在内存中会有两个地方存储10. 再看下面的代码 Vector x=new Vector(); x.Value=20; Vector y=x; Console.WriteLine(y.Value); y.Value=50; Console.WriteLine(x.Value); Vector

C#类和接口、虚方法和抽象方法及值类型和引用类型的区别

1.C#类和接口的区别 接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念! 而类是负责功能的具体实现! 在类中也有抽象类的定义,抽象类与接口的区别在于: 抽象类是一个不完全的类,类里面有抽象的方法,属性,也可以有具体的方法和属性,需要进一步的专业化. 但接口是一个行为的规范,里面的所有东西都是抽象的! 一个类只可以继承一个基类也就是父类,但可以实现多个接口 PS:接口除了规范一个行为之外,在具体项目中的实际作用也是十分重要的,在面向对象的设计原则以及设计模式的使用中,无不体现

Java性能优化[1]:基本类型 vs 引用类型

在Java性能优化系列中,内存管理是一个要优先考虑的关键因素.而说到内存分配,就必然会涉及到 基本类型和引用类型.所以我们今天就先来介绍一下这两种类型在性能方面各自有什么奥妙(关于这两 种类型在其它方面的奥妙,我会另外写一个帖子). ★名词定义 先明确一下什么是基本类型,什么是引用类型.简单地说,所谓基本类型就是Java语言中如下的8种 内置类型:boolean.char.byte.short.int.long.float.double.而引用类型就是那些可以通过 new来创建对象的类型(基本上