在C#中,以下引用数据类型有哪些属于引用类型的是

C#中的值类型(如结构类型)和引用类型(-中国学网-中国IT综合门户网站
> 信息中心 >
C#中的值类型(如结构类型)和引用类型(
来源:互联网 发表时间: 9:44:04 责任编辑:李志喜字体:
为了帮助网友解决“C#中的值类型(如结构类型)和引用类型(”相关的问题,中国学网通过互联网对“C#中的值类型(如结构类型)和引用类型(”相关的解决方案进行了整理,用户详细问题包括:RT,我想知道:C#中的值类型(如结构类型)和引用类型(如类类型)都要实例化,是不是意味着他们都是一种“类”呢?,具体解决方案如下:解决方案1:#中的值类型(如结构类型)和引用类型(如类类型)都要实例化(初始化一个对象),是不是意味着他们都是一种“类”呢?那该如何从表面上区分他们呢??解决方案2:具体见http解决方案3:谢谢!
1个回答4个回答1个回答1个回答3个回答1个回答2个回答4个回答2个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答
相关文章:
最新添加资讯
24小时热门资讯
Copyright © 2004- All Rights Reserved. 中国学网 版权所有
京ICP备号-1 京公网安备02号C#中 怎样区分值类型和引用类型_百度知道
C#中 怎样区分值类型和引用类型
在堆栈的角度,值类型是分配在 栈里的,引用类型 在栈引用地址,在堆中生成初始化。基本上说继承于 system.value的都是 值类型,如 数值int 、float,结构体 struct等;引用类型包括类、接口、委托和装箱值类型等。像楼上说的:初学时,区分值和引用,没什么太大意义。学到后面 的注重效率和优化 ,尤其是在 装箱 和拆箱 中 要注意建立的变量是引用类型还是值类型的。
其他类似问题
2人觉得有用
为您推荐:
值类型包括简单值类型和复合型类型。简单值类型可以再细分为整数类型、字符类型、实数类型和布尔类型;而复合类型则是简单类型的复合,包括结构(struct)类型和枚举(enum)类型。
数据类型 说明 取值范围 对应于System程序集中的结构
有符号8位整数 -128-127 SByte
byte 无符号8位整数 0-255 Byte
short 有符号16位整数 - Int16
ushort 无符号16位整数 0-65535 UInt16
Int 有符号32位整数 -- Int32
uint 无符号32位整数 0- UInt32
long 有符号64位整数 -263-263 Int64
ulong 无符号64位整数 0-264 UInt64
C#中采用Unicode字符集来表示字符类型。
数据类型 说明 取值范围
float 32位单精度实数...
个人的理解,大部分能new的,就是引用类型,不能new的。。。差不多就是值类型了。但是结构可以new的- -、还有一些基本类型,数字的基本是值类型,string是引用的。。。开头大写的基本上是引用的。。。你只要记住特殊的一些情况就可以了。。。说实在的,在最初的学习中,区分值和引用,没什么太大意义。。。以后会用些用
类是引用类型结构和枚举是值类型
值类型的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁比特客户端
您的位置:
详解大数据
详解大数据
详解大数据
详解大数据
c#引用类型与值类型的区别大盘点
关键字:开发
  解析:CLR支持两种类型:值类型和引用类型。用Jeffrey Richter(《CLR via C#》作者)的话来说,“不理解引用类型和值类型区别的程序员将会把代码引入诡异的陷阱和诸多性能问题”。这就要求我们正确理解和使用值类型和引用类型。
  值类型包括C#的基本类型(用关键字int、char、float等来声明),结构(用struct关键字声明的类型),枚举(用enum关键字声明的类型);而引用类型包括类(用class关键字声明的类型)和委托(用delegate关键字声明的特殊类)。
  C#中的每一种类型要么是值类型,要么是引用类型。所以每个对象要么是值类型的实例,要么是引用类型的实例。值类型的实例通常是在线程栈上分配的(静态分配),但是在某些情形下可以在堆中。引用类型的对象总是在进程堆中分配(动态分配)。
  (1)在C#中,变量是值还是引用仅取决于其基本数据类型。C# 的基本数据类型都与平台无关。C#的预定义类型并没有内置于语言中,而是内置于.NET Framework中。.NET使用通用类型系统(CTS)定义可以在中间语言(IL)中使用的预定义数据类型。C#中所有的数据类型都是对象。它们可以 有方法、属性等。例如,在C#中声明一个int变量时,声明实际上是CTS(通用类型系统)中System.Int32的一个实例:
   i = 1; s = i.ToString();
  (2)System.Object和System.ValueType。引 用类型和值类型都继承自System.Object类。不同的是,几乎所有的引用类型都直接从System.Object继承,而值类型则继承其子类,即 直接继承System.ValueType。作为所有类型的基类,System.Object提供了一组方法,这些方法在所有类型中都能找到。其中包含 toString方法及clone等方法。System.ValueType继承System.Object。它没有添加任何成员,但覆盖了所继承的一些 方法,使其更适合于值类型。
  (3)值类型。C#的所有值类型均隐式派生自System.ValueType:
  结构体:struct(直接派生于System.ValueType)。
  数 值类型:整型,sbyte(System.SByte的别 名),short(System.Int16),int(System.Int32),long(System.Int64),byte(System.Byte),ushort(System.UInt16)、
  ,uint(System.UInt32),ulong(System.UInt64),char(System.Char)。
  浮点型:float(System.Single),double(System.Double)。
  用于财务计算的高精度decimal型:decimal(System.Decimal)。
  bool型:bool(System.Boolean的别名)。
  用户定义的结构体(派生于System.ValueType)。
  枚举:enum(派生于System.Enum)。
  可空类型。 每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。例如:
  int i = 0;
  等价于:
  int i = new int();
  使用new运算符时,将调用特定类型的默认构造函数并对变量赋予默认值。在上例中,默认构造函数将值0赋给了i。
  所有的值类型都是密封(seal)的,所以无法派生出新的值类型。
  值 得注意的是,System.ValueType直接派生于System.Object。即System.ValueType本身是一个类类型,而不是值类 型。其关键在于ValueType重写了Equals()方法,从而对值类型按照实例的值来比较,而不是引用地址来比较。可以用 Type.IsValueType属性来判断一个类型是否为值类型:
  TestType testType = new TestType (); if (testTypetype.GetType().IsValueType) { Console.WriteLine("{0} is value type.", testType.ToString()); }
  (4)引用类型C#有以下一些引用类型:
  数组(派生于System.Array)
  用户需定义以下类型。
  类:class(派生于System.Object);
  接口:interface(接口不是一个“东西”,所以不存在派生于何处的问题。接口只是表示一种contract[contract])。
  委托:delegate(派生于System.Delegate)。
  object(System.Object的别名);
  字符串:string(System.String的别名)。
  可以看出:
  引用类型与值类型相同的是,结构体也可以实现接口;引用类型可以派生出新的类型,而值类型不能;引用类型可以包含null值,值类型不能;引用类型变量的赋值只复制对象的引用,而不复制对象本身。而将一个值类型变量赋给另一个值类型变量时,将复制包含的值。
  (5)内存分配。值 类型的实例经常会存储在栈上的。但是也有特殊情况。如果某个类的实例有个值类型的字段,那么实际上该字段会和类实例保存在同一个地方,即堆中。不过引用类 型的对象总是存储在堆中。如果一个结构的字段是引用类型,那么只有引用本身是和结构实例存储在一起的(在栈或堆上,视情况而定)。如下例所示:
  public struct ValueTypeStruct { private object referenceTypeO public void Method() { referenceTypeObject = new object(); object referenceTypeLocalVariable = new object(); } } ValueTypeStruct valueTypeStructInstance = new ValueTypeStruct(); valueTypeStructInstance.Method(); //referenceTypeObject 和 referenceTypeLocalVariable 都在哪存放?
  单看valueTypeStructInstance,这是一个结构体实例,感觉似乎是整块都在栈上。但是字段referenceTypeObject是引用类型,局部变量referenceTypeLocalVarible也是引用类型。
  public class ReferenceTypeClass { private int _valueTypeF public ReferenceTypeClass() { _valueTypeField = 0; } public void Method() { int valueTypeLocalVariable = 0; } } ReferenceTypeClass referenceTypeClassInstance = new ReferenceTypeClass(); // _valueTypeField在哪存放? referenceTypeClassInstance.Method(); // valueTypeLocalVariable在哪存放?
  referenceTypeClassInstance 也有同样的问题,referenceTypeClassInstance本身是引用类型,似乎应该整块部署在托管堆上。但字段 _valueTypeField是值类型,局部变量valueTypeLocalVariable也是值类型,它们究竟是在栈上还是在托管堆上?
  对上面的情况正确的分析是:引用类型在栈中存储一个引用,其实际的存储位置位于托管堆。为了方便,简称引用类型部署在托管堆上。值类型总是分配在它声明的地方,作为字段时,跟随其所属的变量(实例)存储;作为局部变量时,存储在栈上。
  (6)辨明值类型和引用类型的使用场合。在C#中,我们用struct/class来声明一个类型为值类型/引用类型。考虑下面的例子:
  SomeType[] oneTypes = new SomeType[100];
  如 果SomeType是值类型,则只需要一次分配,大小为SomeType的100倍。而如果SomeType是引用类型,刚开始需要100次分配,分配后 数组的各元素值为null,然后再初始化100个元素,结果总共需要进行101次分配。这将消耗更多的时间,造成更多的内存碎片。所以,如果类型的职责主 要是存储数据,值类型比较合适。
  一般来说,值类型(不支持多态)适合存储供 C#应用程序操作的数据,而引用类型(支持多态)应该用于定义应用程序的行为。通常我们创建的引用类型总是多于值类型。如果满足下面情况,那么我们就应该创建为值类型:该类型的主要职责用于数据存储。
  该类型的共有接口完全由一些数据成员存取属性定义。
  该类型永远不可能有子类。
  该类型不具有多态行为。
  答案:在C#中,变量是值还是引用仅取决于其数据类型。C#的值类型包括:结构体(数值类型、bool型、用户定义的结构体),枚举,可空类型。
  C#的引用类型包括:数组,用户定义的类、接口、委托,object,字符串。数组的元素,不管是引用类型还是值类型,都存储在托管堆上。
  引 用类型在栈中存储一个引用,其实际的存储位置位于托管堆。简称引用类型部署在托管推上。值类型总是分配在它声明的地方:作为字段时,跟随其所属的变量(实 例)存储;作为局部变量时,存储在栈上。值类型在内存管理方面具有更好的效率,并且不支持多态,适合用做存储数据的载体;引用类型支持多态,适合用于定义 应用程序的行为。
[ 责任编辑:jj ]
在互联网环境下,企业面临各种竞…
甲骨文的云战略已经完成第一阶段…
软件信息化周刊
比特软件信息化周刊提供以数据库、操作系统和管理软件为重点的全面软件信息化产业热点、应用方案推荐、实用技巧分享等。以最新的软件资讯,最新的软件技巧,最新的软件与服务业内动态来为IT用户找到软捷径。
商务办公周刊
比特商务周刊是一个及行业资讯、深度分析、企业导购等为一体的综合性周刊。其中,与中国计量科学研究院合力打造的比特实验室可以为商业用户提供最权威的采购指南。是企业用户不可缺少的智选周刊!
比特网络周刊向企业网管员以及网络技术和产品使用者提供关于网络产业动态、技术热点、组网、建网、网络管理、网络运维等最新技术和实用技巧,帮助网管答疑解惑,成为网管好帮手。
服务器周刊
比特服务器周刊作为比特网的重点频道之一,主要关注x86服务器,RISC架构服务器以及高性能计算机行业的产品及发展动态。通过最独到的编辑观点和业界动态分析,让您第一时间了解服务器行业的趋势。
比特存储周刊长期以来,为读者提供企业存储领域高质量的原创内容,及时、全面的资讯、技术、方案以及案例文章,力求成为业界领先的存储媒体。比特存储周刊始终致力于用户的企业信息化建设、存储业务、数据保护与容灾构建以及数据管理部署等方面服务。
比特安全周刊通过专业的信息安全内容建设,为企业级用户打造最具商业价值的信息沟通平台,并为安全厂商提供多层面、多维度的媒体宣传手段。与其他同类网站信息安全内容相比,比特安全周刊运作模式更加独立,对信息安全界的动态新闻更新更快。
新闻中心热点推荐
新闻中心以独特视角精选一周内最具影响力的行业重大事件或圈内精彩故事,为企业级用户打造重点突出,可读性强,商业价值高的信息共享平台;同时为互联网、IT业界及通信厂商提供一条精准快捷,渗透力强,覆盖面广的媒体传播途径。
云计算周刊
比特云计算周刊关注云计算产业热点技术应用与趋势发展,全方位报道云计算领域最新动态。为用户与企业架设起沟通交流平台。包括IaaS、PaaS、SaaS各种不同的服务类型以及相关的安全与管理内容介绍。
CIO俱乐部周刊
比特CIO俱乐部周刊以大量高端CIO沙龙或专题研讨会以及对明星CIO的深入采访为依托,汇聚中国500强CIO的集体智慧。旨为中国杰出的CIO提供一个良好的互融互通 、促进交流的平台,并持续提供丰富的资讯和服务,探讨信息化建设,推动中国信息化发展引领CIO未来职业发展。
IT专家新闻邮件长期以来,以定向、分众、整合的商业模式,为企业IT专业人士以及IT系统采购决策者提供高质量的原创内容,包括IT新闻、评论、专家答疑、技巧和白皮书。此外,IT专家网还为读者提供包括咨询、社区、论坛、线下会议、读者沙龙等多种服务。
X周刊是一份IT人的技术娱乐周刊,给用户实时传递I最新T资讯、IT段子、技术技巧、畅销书籍,同时用户还能参与我们推荐的互动游戏,给广大的IT技术人士忙碌工作之余带来轻松休闲一刻。
微信扫一扫
关注Chinabyte 您现在的位置:&&>>&&>>&&>>&C#学习日记12数据类型 之 引用类型(前言)正文
C#学习日记12数据类型 之 引用类型(前言)
C#学习日记12数据类型 之 引用类型(前言)
作者/编辑:佚名
& & 前面我们完了C#中简单的数据类型----值类型,后面学习C#中另一个数据类型----引用类型, 引用 这个词在这里的意思是,该类型的变量不直接存储所包含的值,而是指向他所要存储的值,也就是说 引用类型储存的是变量的地址 ,。C#中的引用类型有4种:类 代表 数组 接口& & 在这里我先大致的下各自的意义与定义的方式,后面我会具体写实例来详细介绍。类& & 类是面向对象编成的基本,是一种包含数据成员、函数成员和嵌套类型的数据结构。类的数据成员有常量、域、和事件;函数成员包括、属性、索引指示器、运算符、构造函数、析构函数;类和结构(struct)同样都包含了自己成员,但他们之间最主要的区别在于:类是引用类型,而结构是值类型。类支持继承机制,通过继承派生类可以扩展基类的数据成员和函数方法,进而达到代码重用与设计重用的目的。(有关类的继承、派生会放在后面细说,下一篇会写类的定义),当您定义一个类时,您定义了一个数据类型的蓝图。这实际上并没有定义任何的数据,(因为是地址嘛) 但它定义了类的名称意味着什么,也就是说,类的对象由什么组成及在这个对象上可什么操作。对象是类的实例。构成类的方法和变量成为类的成员。如果我们对某个类定义了一个变量,我们称它为类的一个实例(也可以叫对象,总之以后就的改口啦)。再提一下,C# 中2个常用的类 Object类 和 String类,也放在后面细说。代表& & C# 中的代表(也叫,Delegate),它与C/C++中的指针类似,但是指针在C/C++中是不的,有可能一个意外的删除会造成整个程序的崩溃,而Delegate在C#中是安全的,《》()。Delegate 引用的是某个方法,派生自System.Delegate类,当定一个Delegate 就是对System.Delegare的扩展。具体有关用法后面细说。数组& & 在进行批量处理数据的的时候,我们会用到数组,与C/C++一样,数组是一组类型相同的有序数据,用来存储数据的集合,按照 数组名、数据元素的类型和维数 来描述。C#中提供的System.Array是所有数组类型的基类。数组中某个指定的元素是通过索引来访问的。所有的数组都是由连续的内存位置组成的。最低的地址对应第一个元素,最高的地址对应最后一个元素。接口& & 接口定义了所有类继承接口时应遵循的语法。接口定义了语法合同是什么部分,派生类定义了语法合同怎么做部分。接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的。接口提供了派生类应遵循的标准结构。抽象类在某种程度上与接口类似,但是,它们大多只是用在当只有少数方法由基类声明由派生类实现时。(也就是说接口中只提供方法的声明,具体怎么做由继承他的子类来决定。比如我给5每人100元,他们拿这100元具体干什么就不关我的事了,我只负责提供钱)接口使用interface关键字声明,它与类的声明类似。接口声明默认是 public 的。通过接口可以实现多重继承。(后面细说)& & 引用类型相比之前的值类型要少很多,但是每一个都要复杂很多,我有什么不妥或的地方欢迎指出评论,谢谢阅读,^_^
  〔C#学习日记12数据类型 之 引用类型(前言)〕随文赠言:【受惠的人,必须把那恩惠常藏心底,但是施恩的人则不可记住它。――西塞罗】
  C#学习日记12数据类型 之 引用类型(前言)所属栏目:〖〗
  “C#学习日记12数据类型 之 引用类型(前言)”相关
  〖〗链接地址:
  电脑资料提供的C#学习日记12数据类型 之 引用类型(前言)由网友原创或转发,若C#学习日记12数据类型 之 引用类型(前言)侵犯了您的权益,请与本站联系,谢谢!
上一篇资料: 下一篇资料:
C#学习日记12数据类型 之 引用类型(前言)相关资料}

我要回帖

更多关于 引用数据类型 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信