NET基础课-- 类型基础(NET之美)

1.类型:值类型  引用类型。

分类依据:类型在内存的分配方式。值类型在堆栈,引用类型在托管堆。

名词:栈--所有变量都会被分配在栈上,只不过值类型直接含有数据,引用类型含有一个指向托管堆对象的地址。

含有一个堆上对象的地址的变量叫变量指向此对象或变量引用此对象。

值类型:简单类型(基类库类型别名) int  byte等

声明一个int类型实际是声明一个system.int32的结构类型变量,此变量包含了值类型(此处为结构体)中所有字段

结构   枚举

引用类型:类  委托 接口等

2.变量初始化问题

public struct Point
    {
        public int x;
    }

    class Program
    {
        static void Main(string[] args)
        {
            Point p;//结构类型变量本身就是一个实例
            Console.WriteLine(p.x);//编译器提示可能引用了未赋值的字段x   应该在此之前加p.x=10;
            Console.ReadKey();
        }
    }

  但是另外一种情况  直接通过并打印出0.注意区别。原因是类在初始化时字段也会进行初始化。

 public class Point
    {
        public int x;
    }

    class Program
    {
        static void Main(string[] args)
        {
            Point p = new Point();//注意这里  一定先初始化,否则编译器提示使用未赋值的局部变量
            Console.WriteLine(p.x);
            Console.ReadKey();
        }
    }

3.未将对象引用设置到对象的实例,见如下例子。原因是:a是一个对象引用,没有new过即没有指向任何实际对象。

object a = null;
 Console.WriteLine(a.ToString());
时间: 2024-10-04 02:11:53

NET基础课-- 类型基础(NET之美)的相关文章

C# 类型基础 值类型和引用类型

引言 本文之初的目的是讲述设计模式中的 Prototype(原型)模式,但是如果想较清楚地弄明白这个模式,需要了解对象克隆(Object Clone),Clone其实也就是对象复制.复制又分为了浅度复制(Shallow Copy)和深度复制(Deep Copy),浅度复制和深度复制又是以如何复制引用类型成员来划分的.由此又引出了引用类型和值类型,以及相关的对象判等.装箱.拆箱等基础知识.索性从最基础的类型开始自底向上写起. 值类型和引用类型 先简单回顾一下C#中的类型系统.C# 中的类型一共分为

C# 类型基础——你可能忽略的技术细节

引言 本文之初的目的是讲述设计模式中的 Prototype(原型)模式,但是如果想较清楚地弄明白这个模式,需要了解对象克隆(Object Clone),Clone 其实也就是对象复制.复制又分为了浅度复制(Shallow Copy)和 深度复制(Deep Copy),浅度复制 和 深度复制又是以 如何复制引用类型成员来划分的.由此又引出了 引用类型 和 值类型,以及相关的对象判等.装箱.拆箱等基础知识. 于是我干脆新起一篇,从最基础的类型开始自底向上写起了.我仅仅想将对于这个主题的理解表述出来,

第四章 类型基础

1. 概述 本章讲述使用 类型 和 CLR 时需要掌握的一些基础知识. 2. 名词解释 3. 主要内容 3.1 所有类型都从System.Object 派生 所有对象都用new操作符来创建,步骤如下: ① 计算类型及其所有基类型中定义的实例字段需要的字节数.包括两个额外成员:类型对象指针 和 同步块索引. ② 从托管堆中分配指定类型要求的字节数,从而分配对象的内存,分配的所有字节都设为零(0). ③ 初始化对象的 类型对象指针 和 同步块索引. ④ 调用类型的实例构造器,向其传入在对new的调用

C# 类型基础

引言 本文之初的目的是讲述设计模式中的 Prototype(原型)模式,但是如果想较清楚地弄明白这个模式,需要了解对象克隆(Object Clone),Clone其实也就是对象复制.复制又分为了浅度复制(Shallow Copy)和深度复制(Deep Copy),浅度复制 和 深度复制又是以 如何复制引用类型成员来划分的.由此又引出了 引用类型和 值类型,以及相关的对象判等.装箱.拆箱等基础知识. 于是我干脆新起一篇,从最基础的类型开始自底向上写起了.我仅仅想将对于这个主题的理解表述出来,一是总

NET CLR via C#(第4版)第4章 类型基础

本章内容: 1 所有类型都从System.Object派生 2 类型转换 3 命名空间和程序集 4 运行时的相互关系 本章讲述使用类型和CLR时需掌握的基础知识.具体地说,要讨论所有类型都具有的一组基本行为. 讨论类型安全性.命名空间.程序集.以及如何将对象从一种类型转换成另一种类型. 本章最后会解释类型.对象.线程栈和托管堆在运行时的相互关系. 4.1 所有类型都从System.Object派生 CLR要求每个类型最终都从System.Object类型派生.从而确保类每个对象都具备一组最基本的

【C#进阶系列】04 类型基础

关于System.Object 所有类型都从System.Object派生而来. System.Object的公共方法中ToString()一般是返回对象的类型的全名,只有Int32这些类型将其重写后,新方法才会返回其值的字符串表示. 其中还有两个受保护的方法: MemberwiseClone:深复制. Finalize:在垃圾回收器判断此对象应该被回收后,在对象的内存被实际回收前会调用此方法. 关于类型判断和转换: 用is来判断对象为某类型或者某类型的派生类,是为true,不是为false.

mysq字段类型基础

字段后面括号里的数字含义 对数字类型的字段,它能够存取的数字的范围,也就是大小是固定的,你怎么再后面括号里改都没有,括号里的数字是限制显示的长度的.主要是对某些值的宽度短于该列宽度的值进行左填补显示的. 当与可选的扩展属性 ZEROFILL 一起使用时,缺省填补用的空格被零代替.举例来说,一个列被定义为 INT(5) ZEROFILL,插入的值 4 被检索出来时为 00004 对于字符类型字段,其可限制字符长度,如varchar(8) 一般建表时,数字类型的字段直接选择类型即可,不需要指定宽度,

使用Swift操作NSDate类型基础

时间类型是我们在处理业务的时候使用非常频繁的一个数据类型.下面我们看一下时间NSDate的基本使用方法. 1.比较大小 我比较擅长.NET,我们知道C#里面DateTime类型可以使用">""<""="来直接判断.但是在Swift里NSDate是不支持这种比较的方式的.我们需要使用NSDate.Compare方法来比较.NSDate.Compare返回一个枚举NSComparisonResult.这个枚举包含3个值: NSCompar

第4章 类型基础 -- 4.1 所有类型都从System.Object派生

4.1 所有类型都从System.Object派生 “运行时”要求每个类型最终都从System.Object类型派生. 由于所有类型最终都从System.Object派生,所以每个类型的每个对象都保证了一组最基本的方法. System.Object类提供了如下表所示的公共实例方法: 表4-1 System.Object的公共方法 Equals 若两个对象具有相同的值,就返回 true .详情请参考"对象相等性和同一性" GetHashCode 返回对象的值的哈希码.如果某个类型的对象要