广告
返回顶部
首页 > 资讯 > 精选 >C#基元类型、值类型、引用类型是什么
  • 655
分享到

C#基元类型、值类型、引用类型是什么

2023-06-17 21:06:05 655人浏览 独家记忆
摘要

这篇文章主要讲解了“C#基元类型、值类型、引用类型是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#基元类型、值类型、引用类型是什么”吧!首先了解下什么是基元类型,基元类型是编译器直接

这篇文章主要讲解了“C#基元类型、值类型、引用类型是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#基元类型、值类型、引用类型是什么”吧!

首先了解下什么是基元类型,基元类型是编译器直接支持的数据类型,像我们平时经常用到的int string bool 都是基元类型,基元类型是映射到FCL中的类型,像前面的三种类型对应到FCL中就是Int32 String Boolean,基元类型只是给我们的编程提供了方便,它和FCL中的类型在编译后最终生成的IL完全相同。下面给出基元类型和FCL类型的对应表
我们平时在写程序时通常都是使用基元类型,因为方便,但本书的作者认为应该直接使用FCL中的类型,原因如下:

C#基元类型

FCL类型

CLS相容

说明

sbyte

System.Sbyte

 

 

byte

System.Byte

 

 

short

System.Int16

 

 

ushort

System.UInt16

 

 

int

System.Int32

 

 

uint

System.Uint32

 

 

long

System.Int64

 

 

ulong

System.Uint64

 

 

char

System.Char

 

 

float

System.Single

 

 

double

System.Double

 

 

bool

System.Boolean

 

 

decimal

System.Decimal

 

 

object

System.Object

 

 

string

System.String

 

 

在c#中long对应的FCL类型为System.Int64,但是在其他的语言中,如c++ 就将long视为一个Int32。这样习惯于一种编程语言的人在看另一种编程语言写的源码是就会产生错误的理解。在FCL中的许多的方法将类型名作为方法名的一部分,如System.Convert类提供ToBoolean,ToInt32,ToSingle等。这样在使用基元类型做类型转换时就感觉有点怪怪的,如:float val=Convert.ToSingle(“23”);

CLR VIA C#教程之值类型和引用类型的区别
1.所有的值类型都是从System.TypeValue派生,如Struct Enum都是值类型;所有引用类型都是从System.Object派生。
2.值类型分配在线程堆栈上,引用类型分配在托管堆上。
3.值类型表现形式有未装箱形式和已装箱形式,而引用类型总是已装箱形式。
4.所有的值类型都是sealed类型,所以值类型不能作为任何类型的基类型,也不能在值类型中引入虚方法。
5.创建一个引用类型变量时,会被初始化为null,试图使用一个null的引用类型变量时,会抛出NullReferenceException异常,也就是常见的“未将对象引用设置到对象的实例”;值类型在创建时所有成员都初始化为0了,所以不会抛出该异常。

原文例子表示值类型和引用类型的区别

class Program  {  static void Main(string[] args)  {  SomeRef r1 = new SomeRef();  SomeVal v1 = new SomeVal();  r1.x = 5;  v1.x = 5;  Console.WriteLine(r1.x);    //5  Console.WriteLine(v1.x);    //5  SomeRef r2 = r1;  SomeVal v2 = v1;  r1.x = 8;  v1.x = 9;  Console.WriteLine(r1.x);    //8  Console.WriteLine(r2.x);    //9  Console.WriteLine(v1.x);    //9  Console.WriteLine(v2.x);    //5  }  }  class SomeRef  {  public Int32 x;  }  struct SomeVal  {  public Int32 x;  }


CLR VIA C#教程之CLR中类型字段布局的控制

为了提高性能,clr能按照所选择的任何方式来排列类型的字段。我们可以通过在类会是结构上使用System.Runtime.InteropServices.StructLayoutAttribute属性来改变这种排列的顺序。该属性接受一个LayoutKind的枚举值(Auto,Sequential,Explicit),默认情况下C#编译器会为类选择Atuo,为结构选择Sequential。下面来定义一个类和一个结构

struct SomeVal  {  public String name;  public Int32 id;   }   class SomeRel  {  public String name;  public Int32 id;  }

查看IL代码可以看到默认的排列顺序

C#基元类型、值类型、引用类型是什么

现在给类和结构加上属性,首引用加命名空间 using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Auto)]  struct SomeVal  {  public String name;  public Int32 id;  }  [StructLayout(LayoutKind.Sequential)]  class SomeRel  {  public String name;  public Int32 id;  }

再查看IL可以看到顺序已经发生了变化

    C#基元类型、值类型、引用类型是什么

C#编译器总是会默认给结构这样的值类型选择Sequential,是因为值类型会经常和非托管代码进行交互,字段必须保持和开发人员定义的一致。我们在编码过程中如果判断所创建的值类型不会与非托管代码进行交互,就可以像上面那样给创建的值类型添加[StructLayout(LayoutKind.Auto)] ,让其进行自动排列,以提高性能。

感谢各位的阅读,以上就是“C#基元类型、值类型、引用类型是什么”的内容了,经过本文的学习后,相信大家对C#基元类型、值类型、引用类型是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: C#基元类型、值类型、引用类型是什么

本文链接: https://www.lsjlt.com/news/293026.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#基元类型、值类型、引用类型是什么
    这篇文章主要讲解了“C#基元类型、值类型、引用类型是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#基元类型、值类型、引用类型是什么”吧!首先了解下什么是基元类型,基元类型是编译器直接...
    99+
    2023-06-17
  • c#引用类型与值类型的区别是什么
    这篇文章主要讲解了“c#引用类型与值类型的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c#引用类型与值类型的区别是什么”吧!解析:CLR支持两种类型:值类型和引用类型。用Jeff...
    99+
    2023-06-17
  • C#中值类型和引用类型的区别
    一、值类型和引用类型的区别 .NET的类型可以分为两类:值类型和引用类型。这两种类型各有特点,即使它们都继承自System.Object,并且有装箱和拆箱等操作确保两种类型可以方便地...
    99+
    2022-11-13
  • 如何理解C#值类型和引用类型
    本篇内容主要讲解“如何理解C#值类型和引用类型”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解C#值类型和引用类型”吧!C#值类型数据直接在他自身分配到的内存中存储数据,而C#引用类型只是...
    99+
    2023-06-17
  • Javascript中基本类型和引用类型是什么
    这篇文章给大家分享的是有关Javascript中基本类型和引用类型是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 1.基础类型A. 基础类型有5种,Number,...
    99+
    2022-10-19
  • C#中如何使用值类型和引用类型
    C#中如何使用值类型和引用类型,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1。变量:变量是指在程序的运行过程中随时可以发生变化的量。语法:数据类型 变量名2。常量:也称常数,...
    99+
    2023-06-17
  • js中值类型和引用类型的区别是什么
    这篇文章主要介绍“js中值类型和引用类型的区别是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“js中值类型和引用类型的区别是什么”文章能帮助大家解决问题。1.JavaScript中的变量类型有哪...
    99+
    2023-07-02
  • C#基础入门之值类型和引用类型的区别详析
    目录一、值类型和引用类型的区别 1、赋值时的区别 2、内存分配的区别 3、来自继承结构的区别 二、总结 一、值类型和引用类型的区别 .NET的类型可以分为两类:值类型和引用类型。这...
    99+
    2022-11-12
  • C#中的预定义类型与引用类型是什么
    今天小编给大家分享一下C#中的预定义类型与引用类型是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、预定义的值类型一个...
    99+
    2023-06-30
  • Java中值类型和引用类型详解
    我们都知道java是一种面向对象的编程语言,但是在实际意义上java并不是纯面向对象,因为面向对象的意义就是万物皆对象,那么如果说int类型的变量也是一个对象的话,那么我们应该能用&...
    99+
    2022-11-12
  • JavaScript基本数据类型和引用数据类型是什么
    本篇内容主要讲解“JavaScript基本数据类型和引用数据类型是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript基本数据类型和引用数据类...
    99+
    2022-10-19
  • C#值类型、引用类型、泛型、集合的表达式树怎么创建
    这篇文章主要介绍了C#值类型、引用类型、泛型、集合的表达式树怎么创建的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#值类型、引用类型、泛型、集合的表达式树怎么创建文章都会有所收获,下面我们一起来看看吧。一,定...
    99+
    2023-06-26
  • C++中的引用类型是什么
    这篇文章主要讲解了“C++中的引用类型是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++中的引用类型是什么”吧!引用,顾名思义是某一个变量或对象的别名,对引用的操作与对其所绑定的变量...
    99+
    2023-06-27
  • javaScript引用类型与基本类型有哪些
    这篇文章主要讲解了“javaScript引用类型与基本类型有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javaScript引用类型与基本类型有哪些”吧!  1. 概念:  基本类型也...
    99+
    2023-06-04
  • C#中的预定义类型与引用类型
    一、预定义的值类型 一个字节(1Byte)=8位(8Bit) BitArarry类可以管理位Bit。 1、整型 所有的整形变量都能用十进制或十六进制表示:long a=0x...
    99+
    2022-11-13
  • JavaScript 引用类型之原始值包装类型String
    目录String 原始值包装类型String 原始值包装类型 操作方法1.字符串编码常规化函数 normalize()方法2.字符串拼接函数concat()3.字符串提取子...
    99+
    2022-11-13
  • C#值类型、引用类型、泛型、集合、调用函数的表达式树实践
    目录一,定义变量二,访问变量/类型的属性字段和方法1. 访问属性调用静态类型属性调用实例属性/字段2. 调用函数调用静态类型的函数调用实例的函数三,实例化引用类型new给属性赋值创建...
    99+
    2022-11-13
  • js中值类型和引用类型的区别介绍
    1.JavaScript中的变量类型有哪些? (1)值类型(基本类型):字符串(string)、数值(number)、布尔值(boolean)、undefined、null ...
    99+
    2022-11-13
  • Java中引用类型和值类型的示例分析
    这篇文章给大家分享的是有关Java中引用类型和值类型的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。值类型传值,引用类型传引用Demo:public class ReferDemo {   &n...
    99+
    2023-06-03
  • C#中的引用类型以及特殊引用类型详解
    基本 哪些属于引用类型 类(object,string),接口、数组、委托 引用类型分配在哪里 引用类型变量位于线程栈。引用类型实例分配在托管堆上。当引用类型实例的大小小于85000...
    99+
    2022-11-13
    C# 引用类型 特殊引用类型
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作