摘要

  1. 什么是类型
  2. 什么是类型的实例化
  3. 类型的成员
  4. 预定义类
  5. 用户自定义类
  6. 内存之堆和栈
  7. 值类型和引用类型
using System;

namespace 基础教程二
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

1.什么是类型

      从宏观的角度看,c#程序是其实就是一组类型的声明,程序的运行就是如何使用这些类型。我们看上面的代码,using system是引用了一个命名空间,这个命名空间名称为System,这个空间里包含了一些和System有关的类,可以看成是类的类,如Console类就是System命名空间中的类;上面的"namespace 基础教程二"是我们自己声明的命名空间,这个命名空间可以存放很多和基础教程相关的类,如 Program类,Program类是系统自动生成的类,我们也可以自己取一个类名。我们可以这样认为,命名空间就是一个包裹,这个包裹里包含着按某一规则分类的物品,这个分类的规则是我们自己定义的,如这个包裹的名称叫水果,那么这个叫水果的包裹里可以放苹果、橘子、香蕉、菠萝等,苹果、橘子、香蕉、菠萝都是水果中的类。

     类型或者说类可以看成是一种或多种数据的组合或者说是一种数据结构,也可以看成一种模板。它说明了该类型数据的构造,类型的定义有:

  • 名称
  • 用于保存数据成员的数据结构
  • 一些行为和约束条件
using System;

namespace 基础教程二
{
    class Program
    {
        private string _name;// 数据成员
        private int _age;// 数据成员


        static void Main(string[] args)// 行为
        {
            
        }

        public string GetName()// 行为
        {
            return this.Name;
        }


        public string Name
        {
            set { _name = value; }
            get { return _name; }

        }

        public int Age
        {
            set { _age = value; }
            get { return _age; }
        }

        public Program(string name,int age)
        {
            this.Name = name;
            this.Age = age;

        }
    }
}

2.什么是类型的实例化

 创建某个类型的对象就叫做类型的实例化。

  • 通过实例化创建该类型的对象称为该类型的实例(也可以叫对象,实例和对象的称呼可以互换)
  • 在c#种,每个数据项都是对应类型的实例,可以是语言库提供的也可以是程序员自己定义的

3.类型的成员

只能存储一个数据项的类型成为简单数据项,如int,short,long等。能存储多个同种类型的数据项的类型叫做数组,如果想要存储多个不同类型的数据对象呢?如既想存储string类型也想存储int类型,怎么存储呢?类型就可以存储多种类型的数据项。这些数据项称为类型的成员。

其实类型有两种成员,一是数据成员,另一个是函数成员。

数据成员是用来存储数据的,而函数成员是对数据进行操作的代码,是逻辑的实现。

class Student
{
    public string name{get;set;};  // 数据成员

    public string GetName()       // 函数成员,对数据进行加工
   {
      return name;
   }
}

4.预定义类型

 预定义类型就是语言库里已经定义好的类型,我们可以直接调用。c#里有16种预定义类型,包括13种简单类型和3种非简单类型。这个只要记住就行了,后面代码写的多了自然就能理解。

5.用户自定义类

c#除了预定义类型,开发者也可以自定义类型。可以自定义的类型为:

  • 类类型
  • 结构
  • 数组
  • 枚举
  • 委托
  • 接口

创建类型要包含类型的种类,名称、对类型中每个成员的声明。如

class Test        // class是要自定义的类型的种类,Test是名称
{
   public string name;         // 成员
   pub  string GetName()    // 成员
  { 
    return name;
  }
}

6.内存和栈

栈是一个内存数组的数据结构,具有先进先出的特点。栈存储:

  • 某些类型变量的值
  • 程序当前的执行环境
  • 传递方法的参数

存入数据叫入栈,将数据删除叫出栈,并且入栈出栈都在栈顶操作。

堆是内存的某一块区域。空间较大,用来存放某些较大的数据类型。栈只能栈顶对数据进行操作,但是堆可以在任意位置对数据进行操作。

7.值类型和引用类型

类型可以分为两种:值类型和引用类型。值类型存储较简单,只需要在栈中单独存储数据,而引用类型要两段内存,一段内存存引用,指向堆中的存放位置,一段是用来存放实际的数据(在堆中)