博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(一)C#关于变量和类型的冷知识
阅读量:5780 次
发布时间:2019-06-18

本文共 1447 字,大约阅读时间需要 4 分钟。

  • 变量的初始化语法

  1. 在字段中,可以不显式的初始化变量,会自动给默认值
  2. 在方法中,不显式初始化的变量直接用就会报错。
    private static int i;public static void run(){    int j;    //可以这么写    Console.WriteLine("未初始化的字段:" + i.ToString());    //下面的写法直接会报错,编译不通过    //Console.WriteLine("未初始化的变量:" + j.ToString());}复制代码
  • 关于强制类型转换

使用括号的强制类型转换如果出错会抛出异常,推荐使用is as进行类型的判断和转换。

  • double类型的不常用值

  1. double.PositiveInfinity 正无穷
  2. double.NegativeInfinity 负无穷
  3. double.NaN 不是数值类型(在WPF中标识Auto)
  • 巧记引用类型和值类型

区分这两个可以不用死记硬背,从原理的方面去理解:

C#区分引用类型和值类型的原因是为了得到更好的性能,值类型在栈中,引用类型在堆中。 为什么需要引用类型? 因为有一些类型可能很大,很占内存,这时候就用引用类型。 所以 C#中引用类型为 Object 和 string 这两个都有可能无限增大

  • 结构体和类

  1. 结构体是值类型,类是引用类型,所以结构体分配空间在栈上 类分配空间在堆上,结构体的性能更高

  2. 由于栈是系统分配空间和释放的,所以结构体不能有析构函数

  3. 结构体初始化字段的时候不能给初始值,原因是:结构体的默认无参构造函数是被“锁定”的。看下面的例子:

    // 结构体的默认无参构造函数被“锁定”public struct Structure{    private int i;    // 正确    public Structure(int i)    {        this.i = i;    }    // 报错    public Structure()    {        this.i = 0;    }}复制代码

    思考: 一个还是两个?

    public class StructureMethod{    private int i;    public StructureMethod(int i)    {        this.i = i;    }}public struct Structure{    private int i;    public Structure(int i)    {        this.i = i;    }}// 使用// 错误写法StructureMethod sm = new StructureMethod();// 正确写法Structure s = new Structure();复制代码

    看上面的代码,在初始化类的时候,只能使用一个参数的构造函数实例化对象,而实例化结构体却能使用两个构造函数来实例化,同样说明了结构体锁定默认构造函数的事实。

  4. 实际应用

    因为栈空间小,速度快,利用这个特点,结构体可以用于轻量级对象,用以提升效率,例如,矩形,颜色,点等用结构体就可以提升效率。或者在使用的时候,遇到传值的场景,希望拷贝一份进行传递,不像传递引用,这时候用结构体就会方便很多。

转载于:https://juejin.im/post/5bfc10325188256d9832bfbd

你可能感兴趣的文章
前端面试查漏补缺--(八) 前端加密
查看>>
【重温基础】8.字符串
查看>>
关于MVP分层架构在项目中的实际运用
查看>>
Express和Koa的对比
查看>>
让数据库不再成为业务发展瓶颈——分布式数据库架构设计
查看>>
npm常用命令
查看>>
两级缓存实现分析之缓存设置
查看>>
Web Beacon 刷新/关闭页面之前发送请求
查看>>
确认过眼神(*╹▽╹*),这就是大家想要的BCH
查看>>
福布斯新闻顾问:比特币的设计缺陷制约比特币发展前景
查看>>
vue踩坑记录之:手机端查看vue项目与 listen EADDRNOTAVAIL报错
查看>>
前端性能优化--浏览器存储
查看>>
为什么要学习Python?学习Python可以做什么?
查看>>
测试工程师值得被尊重!是否有此共鸣!
查看>>
dubbo之SPI
查看>>
css3 绘制画圆、扇形
查看>>
Python抽象类
查看>>
【速记】React解决IE浏览器svg标签不支持innerHTML操作的问题及相关拓展知识
查看>>
浅谈cookie,session和localStorage,sessionStorage的区别
查看>>
android 记一次解决键盘遮挡问题
查看>>