zoukankan      html  css  js  c++  java
  • C#2008与.NET 3.5 高级程序设计读书笔记(3)C#核心编程结构I

    1.数据类型类的层次结构

    在这里,只需要理解处于类层次结构顶端的类型会为派生类型提供一些默认的行为。

    注意,所有这些类型都派生自System.Object,它定义了一组.NET基类库中所有类型都具有的方法(ToString()、Equals()、GetHashCode()等,在第6章会详细介绍这些方法)。
    还要注意,很多数值数据类型都派生自System.ValueType类。派生自ValueType的类型都会自动在栈上进行分配,因此有一个可预测的生命周期,而且非常高效。另一方面,在继承链上没有System.ValueType的类型(如System.Type、System.String、System.Array、System.Exception以及System.Delegate)不会在栈上分配,而是在垃圾回收堆上进行分配。

    2.checked 和 unchecked关键字

    C#提供了checked关键字,当我们把一个语句(或者语句块)包装在checked关键字域内时,C#编译器会使用额外的CIL指令来测试在将两个数值数据类型相加、相乘、相减和相除时可能产生的溢出情况。
    如果发生了溢出,我们会得到一个运行时异常(准确地说是System.OverflowException)

    // 这次,告诉编译器增加CIL代码,如果发生上溢或下溢就抛出异常。
    try
    {
    byte sum = checked((byte)Add(b1, b2));
    Console.WriteLine(
    "sum = {0}", sum);
    }
    catch (OverflowException ex)
    {
    Console.WriteLine(ex.Message);
    }

    如果希望对一段代码语句块进行强制溢出检测,可以按如下所示定义checked域:

    try
    {
    checked
    {
    byte sum = (byte)Add(b1, b2);
    Console.WriteLine(
    "sum = {0}", sum);
    }
    }
    catch (OverflowException ex)
    {
    Console.WriteLine(ex.Message);
    }

     设定项目级别的溢出检测:

    要使用Visual Studio 2008启用这个标志,可以打开项目属性页,然后点击Build选项卡中的Advanced按钮。在结果对话框中选择Check for arithmetic overflow/underflow(检测运算上溢/下溢)复选框

  • 相关阅读:
    linux下使用hash_map及STL总结
    编写Linux系统下Daemon程序的方法步骤
    c语言版网络爬虫spiderq
    利用unordered_map代替hash_map My Study
    Mike Wallace of '60 Minutes' to retire
    让Redis使用TCMalloc,实现高性能NOSql服务器
    守护进程的单实例实现_非宁静无以致远_百度空间
    sscanf,sscanf_s及其相关用法 小 楼 一 夜 听 春 雨 博客园
    实现个hash_map容器类玩玩 苍梧 博客园
    [Linux初级]Linux下动态库的生成及链接方法
  • 原文地址:https://www.cnblogs.com/engine1984/p/1766573.html
Copyright © 2011-2022 走看看