C#学习之C#语言基础(数据类型)

数据类型

1. 值类型数据

​ 值类型存储在栈内存中,变量名和变量值都具有固定的大小。声明变量时,会向栈内存申请存储空间,如果栈内存剩余的空间能容下申请的空间,那么就开拓申请的空间,让变量使用,否则抛出栈溢出异常。

​ C#中所有值类型数据直接映射到基础类库的基本类型。可以使用数值类型的IsValueType属性,判断该数据类型是否时值类型。

using System;

namespace DataTypeTest
{
    public class ValueType
    {
        static void Main(string[] args)
        {
            int i = 10;
            string s = "Hello World";
            Console.WriteLine("{0}变量是否是值类型:{1}", i, i.GetType().IsValueType); // True
            Console.WriteLine("{0}变量是否是值类型:{1}", s, s.GetType().IsValueType); // False
        }
    }
}
2. 引用类型数据

​ 在C#中,引用类型存储在堆内存中,声明变量的类型是引用类型,那么公共运行环境受限在堆区中分配内存空间,再在栈区分配一个指向堆区内存地址的区域。

​ 所谓“堆”,就是可以在堆内存的允许下,一个变量可以无限地扩大数据量。

​ C#中,引用类型有:接口、类、委托、集合、数组和字符串等。其中,字符串比较特殊,它的内容不可以修改,如果修改字符串的值,那么会在堆内存中重新分配内存空间,修改原字符串变量在栈内存的地址,使之指向该区域。

using System;
namespace DataTypeTest
{
    public class PreferenceType
    {
        public PreferenceType()
        {
            
        }
        static void Main(String[] args)
        {
            int[] a = new int[3] { 1, 2, 3 };
            int[] b = a;
            b[0] = 4;
            Console.WriteLine("a[0]的值为:{0}", a[0]); // 4
        }
    }
}
3. 两者的区别
比较项目值类型引用类型
内存位置分配在栈区分配在堆区
性能读写效率高(不需地址转换)读写效率低(需要地址转换)
释放使用完毕后立即释放占用内存使用完毕后由程序或垃圾回收器释放内存(不同的语言选择释放的方式不同,就那.NET平台的语言距离,C++是由用户自行释放,C#由垃圾回收器释放)
赋值直接在栈区进行内存复制在栈区复制原对象的引用地址
拓展性修改源代码会引起意外的改变具有多态性,易拓展
4. 类型转换

​ C#类型转换分为显式和隐式

​ 一种数据类型自动转换成另一种数据类型,称之为隐式转换,这种方式数据不会丢失,所以比较安全。

​ 显式转换式强制性的,需要在变量之前指定类型变量的前缀,这种方式会造成数据丢失。显式转换时还需要注意数据类型的取值范围。但转换过程中数据类型过大不能实现显式转换时,程序将抛出范围过大的异常。

​ 对于double类型,需要注意,所以的类型都可以隐式转换成double类型,但double类型只可以显式转换成float类型。

5. 装箱和拆箱

​ 在C#中,值类型转换成引用类型称为装箱,引用类型转换成值类型称为拆箱。

using System;

namespace BoxingAndUnBoxingDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            short s = 1;
            object o = s;   //将short类型的s装箱至object类型的o中
            int i = (int)(short)o;  // 装箱后转换成int,不可写成(int)o,装箱和拆箱的前后数据类型必须对应
            Console.WriteLine("i的值为:{0}", i);		// 1
        }
      /*
      	注意:装箱后的数据不能够使用short以外的数据类型拆箱,必须使用装箱时的short数据类型才可以拆箱
      */
    }
}
6. 范型

​ 在C#中,范型是一种比较特殊的数据类型,公共语言运行时在内存为范型数据预留空间,等待满足范型约束条件的数据来补充。

​ 但内存预留位置的数据填充完毕,数据类型得到确定,确定的过程就称为范型实例化。

​ 在Java和C++中也存在范型的机制,但是他们和C#的实现方式不同,在Java中,范型编程基于基于数据类型的转换机制实现,即将使用范型的数据类型统一转换为Object类型。C++的范型编程基于模块的方式实现,即在编译时就对范型进行了实例化。而C#的范型编程是通过占位符的方式进行的。

using System;

namespace GenericDemo
{
    class Program
    {
      	/*
      		注意:值类型的数据类型是范型类Generics的约束,约束的方法是对范型类型名称使用where约束
      			C#还可以对范型类型的构造方法进行约束
      			class AGenericsClass<TypeOfValue, TypeOfPeferencet> where TypeOfValue : struct
      			where TypeOfReferencet : class,new()
      			在TypeOfReferencet范型上添加”new()“的约束,规定TypeOfReferencet类型必须能够使用无参数的构造方法创建范型类实例。
      			包括两个方面
      			* 具有无参数的构造函数,包含未声明的默认的构造函数
      			* 使用该无参数构造函数能够创建实例
      	*/
        public class Generics<GenercsValue> where GenercsValue : struct
        {
            /// <summary>
            /// 显示当前范型数据类型的名称
            /// </summary>
            /// <param name="a"></param>
            /// <returns></returns>
            public string Show(GenercsValue a)
            {
                return a.GetType().FullName;
            }
        }
        static void Main(string[] args)
        {
            Generics<int> G1 = new Generics<int>();
            Console.WriteLine("整形显示结果:{0}", G1.Show(3));		// System.Int32
            Generics<float> G2 = new Generics<float>();
            Console.WriteLine("浮点数显示结果:{0}", G2.Show(2.15f));		// System.Single
        }
    }
}
已标记关键词 清除标记
相关推荐
<p> <strong><span style="color:#E53333;font-size:24px;"> 课程总体目标:</span></strong> </p> <p> <span style="font-size:16px;">    本中级篇面向的学员不再是完全的编程“小白”,而是具备一定C#编程经验,需要进一步查漏补缺、或者需要进一步全面完善自己C#编程知识体系的广大Unity学员。相信通过本中级篇的学习,可以使得Unity初中级开发人员对于编程语言的掌握更进一步;对于开发中大型游戏项目,在编程语言这一层级进一步打下坚实的语言基础。</span> </p> <p> <br /> </p> <p> <span style="font-size:24px;"><span style="color:#E53333;font-size:18px;"><strong>“中级</strong></span><span style="color:#E53333;font-size:18px;"><strong>篇”课程讲解特点:</strong></span></span> </p> <p> <span style="font-size:16px;">      本中级篇面向初中级游戏研发人员,以及Unity中高级学习者。为了更加深入的刨析各个语法的本质,我们采用反编译解读IL中间语言的方式,来解构语法难点,使得学员最短时间掌握语法本质。</span> </p> <p> <br /> </p> <p> <span style="font-size:18px;color:#E53333;"><strong>本课程讲解内容:</strong></span> </p> <p> <span style="font-size:16px;"> </span><span style="font-size:16px;">     </span><span style="font-size:16px;">"C#(for Unity)中级篇" 在“C#入门”、“基础篇”的基础之上,从以下四个方面着重研究我们游戏开发(包含软件开发)过程中,C#最重要、最实用的技能模块,使得广大游戏研发人员,对于C#这门Unity脚本有进一步更加完善的认识。</span><br /> <br /> <br /> <span style="font-size:16px;"><strong>一:.Net 框架讲解。</strong></span><br /> <span style="font-size:16px;">    A) .Net 发展历史。</span><br /> <span style="font-size:16px;">    B)  IL  中间语言。 CLR  公共语言运行时。</span><br /> <span style="font-size:16px;">    C) 多维数据(常用二维数组)与交错数组。</span><br /> <span style="font-size:16px;">    D) 可变参数 Params</span><br /> <span style="font-size:16px;">    E) 进一步解释“实参”,“形参”。</span><br /> <span style="font-size:16px;">    F) 类的实例化内存分配机制。</span><br /> <br /> <span style="font-size:16px;"><strong>二:深入学习对象类型</strong></span><br /> <span style="font-size:16px;">    A)  里氏替换原则(LSP)</span><br /> <span style="font-size:16px;">    B)  类的属性极其本质特性</span><br /> <span style="font-size:16px;">    C)  IS ,AS 关键字</span><br /> <span style="font-size:16px;">    D)  深入学习字符串理论</span><br /> <span style="font-size:16px;">        1] 字符串的“驻留性” 原理。</span><br /> <span style="font-size:16px;">        2] 字符串==与Equals() 的本质区别</span><br /> <span style="font-size:16px;">        3] 更多字符串常用方法学习。</span><br /> <span style="font-size:16px;">    E)  枚举类型以及适用场合。</span><br /> <br /> <span style="font-size:16px;"><strong>三:深入学习集合特性</strong></span><br /> <span style="font-size:16px;">    A)  什么是索引器,以及索引器的适用范围。</span><br /> <span style="font-size:16px;">    B)  学习自定义集合类,以及深入了解Foreach 语句的原理。</span><br /> <span style="font-size:16px;">    C)  深入学习 ArrayList,了解内部存储机制以及原理。</span><br /> <span style="font-size:16px;">    D)  深入学习 HashTable,了解内部存储机制以及原理。</span><br /> <span style="font-size:16px;">    E)  为什么学习泛型集合?</span><br /> <span style="font-size:16px;">    F)  泛型集合与普通集合的性能测试对比实验。</span><br /> <span style="font-size:16px;">    G)  学习“泛型约束”,以及“泛型约束”的适用条件。</span><br /> <br /> <span style="font-size:16px;"><strong>四:委托与事件</strong></span><br /> <span style="font-size:16px;">        A)  什么是委托,先从讲故事学习起:“老板来啦”!</span><br /> <span style="font-size:16px;">    B)  反编译掌握委托的本质。</span><br /> <span style="font-size:16px;">    C)  委托的四大开发步骤。</span><br /> <span style="font-size:16px;">    D)  什么是事件,以及委托与事件的区别。</span><br /> <span style="font-size:16px;">    E)  事件的常用使用方式。</span> </p> <p> <br /> </p> <p> <span style="font-size:18px;color:#E53333;">温馨提示:</span> </p> <p> <span style="font-size:16px;">      本C# for Unity 使用Virtual Studio2012,进行开发与讲解。(学员使用更高版本,对学习没有任何影响)</span> </p> <p> <!--StartFragment --> </p> <div> 一、热更新系列(技术含量:中高级):<br /> A:《lua热更新技术中级篇》<br /> <img src="file://C:/Users/17849/AppData/Roaming/Tencent/QiDian/Temp/%25W@GJ$ACOF(TYDYECOKVDYB.png" />https://edu.csdn.net/course/detail/27087<br /> B:《热更新框架设计之Xlua基础视频课程》<br /> <img src="file://C:/Users/17849/AppData/Roaming/Tencent/QiDian/Temp/%25W@GJ$ACOF(TYDYECOKVDYB.png" />https://edu.csdn.net/course/detail/27110<br /> C:《热更新框架设计之热更流程与热补丁技术》<br /> <img src="file://C:/Users/17849/AppData/Roaming/Tencent/QiDian/Temp/%25W@GJ$ACOF(TYDYECOKVDYB.png" />https://edu.csdn.net/course/detail/27118<br /> D:《热更新框架设计之客户端热更框架(上)》<br /> <img src="file://C:/Users/17849/AppData/Roaming/Tencent/QiDian/Temp/%25W@GJ$ACOF(TYDYECOKVDYB.png" />https://edu.csdn.net/course/detail/27132<br /> E:《热更新框架设计之客户端热更框架(中)》<br /> <img src="file://C:/Users/17849/AppData/Roaming/Tencent/QiDian/Temp/%25W@GJ$ACOF(TYDYECOKVDYB.png" />https://edu.csdn.net/course/detail/27135<br /> F:《热更新框架设计之客户端热更框架(下)》<br /> <img src="file://C:/Users/17849/AppData/Roaming/Tencent/QiDian/Temp/%25W@GJ$ACOF(TYDYECOKVDYB.png" />https://edu.csdn.net/course/detail/27136<br /> 二:框架设计系列(技术含量:中级):<br />  A:《游戏UI界面框架设计系列视频课程》<br /> <img src="file://C:/Users/17849/AppData/Roaming/Tencent/QiDian/Temp/%25W@GJ$ACOF(TYDYECOKVDYB.png" />https://edu.csdn.net/course/detail/27142<br /> B:《Unity客户端框架设计PureMVC篇视频课程(上)》<br /> <img src="file://C:/Users/17849/AppData/Roaming/Tencent/QiDian/Temp/%25W@GJ$ACOF(TYDYECOKVDYB.png" />https://edu.csdn.net/course/detail/27172<br /> C:《Unity客户端框架设计PureMVC篇视频课程(下)》<br /> <img src="file://C:/Users/17849/AppData/Roaming/Tencent/QiDian/Temp/%25W@GJ$ACOF(TYDYECOKVDYB.png" />https://edu.csdn.net/course/detail/27173<br /> D:《AssetBundle框架设计_框架篇视频课程》<br /> <img src="file://C:/Users/17849/AppData/Roaming/Tencent/QiDian/Temp/%25W@GJ$ACOF(TYDYECOKVDYB.png" />https://edu.csdn.net/course/detail/27169<br /> 三、Unity脚本从入门到精通(技术含量:初级)<br /> A:《C# For Unity系列之入门篇》<br /> <img src="file://C:/Users/17849/AppData/Roaming/Tencent/QiDian/Temp/%25W@GJ$ACOF(TYDYECOKVDYB.png" />https://edu.csdn.net/course/detail/4560<br /> B:《C# For Unity系列之基础篇》<br /> <img src="file://C:/Users/17849/AppData/Roaming/Tencent/QiDian/Temp/%25W@GJ$ACOF(TYDYECOKVDYB.png" />https://edu.csdn.net/course/detail/4595<br /> C: 《C# For Unity系列之中级篇》<br /> <img src="file://C:/Users/17849/AppData/Roaming/Tencent/QiDian/Temp/%25W@GJ$ACOF(TYDYECOKVDYB.png" />https://edu.csdn.net/course/detail/24422<br /> D:《C# For Unity系列之进阶篇》<br /> <img src="file://C:/Users/17849/AppData/Roaming/Tencent/QiDian/Temp/%25W@GJ$ACOF(TYDYECOKVDYB.png" />https://edu.csdn.net/course/detail/24465<br /> 四、虚拟现实(VR)与增强现实(AR):(技术含量:初级)<br /> A:《虚拟现实之汽车仿真模拟系统 》<br /> <img src="file://C:/Users/17849/AppData/Roaming/Tencent/QiDian/Temp/%25W@GJ$ACOF(TYDYECOKVDYB.png" />https://edu.csdn.net/course/detail/26618<br /> 五、Unity基础课程系列(技术含量:初级)<br />  A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》<br />  <img src="file://C:/Users/17849/AppData/Roaming/Tencent/QiDian/Temp/%25W@GJ$ACOF(TYDYECOKVDYB.png" />https://edu.csdn.net/course/detail/24643<br /> B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》<br /> <img src="file://C:/Users/17849/AppData/Roaming/Tencent/QiDian/Temp/%25W@GJ$ACOF(TYDYECOKVDYB.png" />https://edu.csdn.net/course/detail/24645<br />  C:《Unity ECS(二) 小试牛刀》<br /> <img src="file://C:/Users/17849/AppData/Roaming/Tencent/QiDian/Temp/%25W@GJ$ACOF(TYDYECOKVDYB.png" />https://edu.csdn.net/course/detail/27096<br /> 六、Unity ARPG课程(技术含量:初中级):<br /> A:《MMOARPG地下守护神_单机版实战视频课程(上部)》<br /> <img src="file://C:/Users/17849/AppData/Roaming/Tencent/QiDian/Temp/%25W@GJ$ACOF(TYDYECOKVDYB.png" />https://edu.csdn.net/course/detail/24965<br /> B:《MMOARPG地下守护神_单机版实战视频课程(中部)》<br /> <img src="file://C:/Users/17849/AppData/Roaming/Tencent/QiDian/Temp/%25W@GJ$ACOF(TYDYECOKVDYB.png" />https://edu.csdn.net/course/detail/24968<br /> C:《MMOARPG地下守护神_单机版实战视频课程(下部)》<br /> <img src="file://C:/Users/17849/AppData/Roaming/Tencent/QiDian/Temp/%25W@GJ$ACOF(TYDYECOKVDYB.png" />https://edu.csdn.net/course/detail/24979<br /> </div> <p> <br /> </p>
©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页