CSharp学习笔记之一 C#中的类型

原创 2013年12月03日 14:07:17

       在C#中,有且仅有两种数据类型:值类型和引用类型。换言之,一个变量要么是值类型,要么是引用类型。像我们常见的数据类型(int,float,double)、结构、枚举等等都属于值类型,而像类、接口、委托等都属于引用类型。所以,要想深入的了解.net framework的一些原理性的知识,值类型与引用类型是跨不过去的一道门槛。

下面是一个关于C#中的类型的总结图片

但是C#中的基本类型的定义是源于什么呢:

C#中变量的类型取决于什么?
         在C#中,变量是值类型还是引用类型,取决于其基本数据类型。在C#中,其基本数据类型并没有内置于语言中,而是存在与.Net Framewok中。.Net使用CTS(通用语言系统)定义在IL(中间语言)中使用的预定义数据类型。C#中所有数据类型都是对象,它们有属性、方法等。

例如,在C#中声明一个int变量时,实际上是声明了CTS中System.Int32的一个实例。

值类型

前面已经说过,值类型隐式派生于System.ValueType,那么在平时遇到的数据类型中,有哪些属于值类型呢?
              整型。包括我们常见的short、int、long、byte、sbyte、bigint等这。
             浮点型。包括float、double。 
             用于财务计算的高精度decimal类型。 
             结构体。struct,已经预定好的和用户自定义的。 
             枚举。 
             bool类型。 
             可空类型。

每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值,这也是为什么像定义一个int型的变量时,有时候没有初始化,它也会有初始值为0的缘故。

还有一点需要注意的是,所有值类型都是seal(密封)类型,是不能再派生出新的数据类型的。


引用类型

在C#中,有以下这些引用类型:
             数组。 
             类。 
             接口。 
             委托。 
             object。其实就是System.Object,老大哥。
             字符串。string,System.String的别名,这也是一个极其重要的引用类型,后面会有专门一篇来描述字符串中的点点滴滴。

与值类型不同的是,引用类型可以派生出新的类型(不绝对话,比如说string就不可以)。需要注意的是,值类型中的结构体也是可以实现接口的。


内存分配

说起值类型和引用类型的不同,内存分配可谓是它们的本质区别了,这也可以让我们更加清晰的了解一些生活中遇到的问题。

值类型的实例一般都会存放在栈上,之所以说是一般,是因为它有时候也会去引用类型那里窜门,会有特殊情况,存放在堆上,接下来会讲。与之不同的是,引用类型的对象则总是存储在堆中,当然它的引用有时候也会存放在栈上,但是对象实例是一定存放在堆上的。

 

委托的invoke、beginInvoke和控件的invoke、beginInvoke的区别

原文地址:http://www.cnblogs.com/worldreason/archive/2008/06/09/1216127.html  在Invoke或者BeginInvoke的使用中无...

异步委托跨线程访问控件解决界面卡死

下面来看第二种方案,就是使用delegate和invoke来从其他线程中控制控件信息。网上有很多人写了这种控制方式,然而我看了很多这种帖子,表明上看来是没有什么问题的,但是实际上并没有解决这个问题,首...

CSharp学习笔记之二 C#中的数组

所谓的数组就是具有相同的数据类型且按一定次序排列的一组变量的集合体,构成一个数组的这些变量称为数组元素。其实数组并不仅仅局限于存在在C#中,在C、C++、java等语言中也都存在着数组。 对于数组首先...

《csharp高级编程》 学习笔记 第三章 对象和类型

第三章 对象和类型 3.1 类和结构 类和结构实际上都是创建对象的模板。 类和结构的区别是他们在内存中的存储方式: 类是存储在堆(heap)上的引用类型,而结构是存储在堆栈(stack)上的值...
  • wuyanyi
  • wuyanyi
  • 2011年10月05日 12:05
  • 2734

CSharp学习笔记之三 C#中的字符串

什么是字符串: 字符串是 String类型的对象,它的值是文本。在内部,文本被存储为 Char对象的顺序只读集合。  C# 字符串末尾没有以 null 结尾的字符;因此 C# 字符串可以包含任意数目的...

CSharp学习笔记之九 多线程编程

今天就来学习一下C#中的线程和进程的问题吧 在C#中要操作线程就要借助Thread这个类来进行的一些操作的,首先要事例化一个thread的类,再在这个类的基础上进行操,在实例化Thread的实例,需...

《csharp高级编程》 学习笔记 第一章 .net 体系结构

第一章 .net 体系结构 几个概念: 1.Microsoft Intermediate Language,MSIL或简称IL。 2.Common Type System,CTS通用类型系统...
  • wuyanyi
  • wuyanyi
  • 2011年10月02日 00:13
  • 647

CSharp学习笔记之七 异常处理

异常处理的概述: 在C#编程中,我们可以通过异常处理语句对异常进行处理。我们经常使用到的异常处理语句有throw语句、try…catch语句和try…catch…finally语句。 ...

《csharp高级编程》 学习笔记 第五章 数组

第五章 数组 5.1  简单数组 5.1.1 数组的声明 int [] myArray; 5.1.2 数组的初始化 myArray=new int [4]; int[] m...
  • wuyanyi
  • wuyanyi
  • 2011年10月05日 20:20
  • 3365

CSharp学习笔记之十 类的修饰符

前面对C#中的类有了一定的解释,但是关于类的很多的东西前面并没有介绍的很清楚,其实C#并不是像我们想象的那样简单,我们要想将C#学的更深一步还是需要多花点时间来进行学习的。努力才会又收获的么。好的来下...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CSharp学习笔记之一 C#中的类型
举报原因:
原因补充:

(最多只允许输入30个字)