类型声明

笼统地来讲,如果你观察C\C++\C#这些语言,你会发现:

  • C 程序是一组函数与数据类型
  • C++ 程序是一组函数与类
  • C# 程序的本质,则是一组类型声明

一个 C# 可执行程序(EXE)或动态链接库(DLL)的源代码,就是由一条或多条类型声明构成。

DLL没有Main程序入口,而可执行文件(EXE),代码中必须声明至少一个类,且该类包含名为 Main 的方法(程序入口).

一个大型的软件,可能源码里面有成千上万个类型(class等等),而且大型的项目可能有不同的程序员开发,每个人负责不同的模块,很难避免不会有同名的类型。那如何避免同名的冲突呢?这时候,就需要我们前面说的“命名空间”。

命名空间(namespace) 用于将一组相关的类型声明归类,并为这组类型赋予统一名称。由于程序本身就是一组关联的类型声明,开发者通常会自定义命名空间,将所有程序类型声明在其内部。

所谓命名空间,就是给一些类,增加一个分组名称。别的地方如果要访问这些类,需要带上这个分组名称。

就好比,在同一个班级里面,如果有两个同名同姓的同学,同学和老师可能会无法通过姓名来区别这两个同学,为了区别他们,可能会增加一些修饰词,例如A组的TOM同学,和B组的TOM同学,这里的A B就相当于命名空间。

下方代码展示了一个包含三条类型声明的程序,所有类型都定义在名为 MyProgram 的命名空间内。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HelloDemo // 声明一个命名空间
{

    class A                  // 声明类型A(类)
    {
        void Fun1() //函数
        {
            // 程序逻辑
        }
    }

    class B                  // 声明类型B(类)
    {
        void Fun1() //函数
        {
            // 程序逻辑
        }
    }

    class C                  // 声明类型C(类)
    {
        static void Main(string[] args) //Main 程序入口
        {
            double pi = 3.14;
            string webSite = "foxdevelop.com";
            Console.WriteLine($"The Pi is {pi} and the website is {webSite}.");
        }
    }

}
Code language: JavaScript (javascript)

关于命名空间,我们后面的课程会详细讲解。

类型是模板

既然 C# 程序本质就是类型声明的集合,学习 C# 的核心就是学习如何创建、使用类型。因此首先要理解:

什么是类型(Type)

你可以把类型理解为创建数据结构的模板:它本身不是数据结构实体,但规定了基于该模板创建出的对象具备哪些特征。

类型只是一份 “图纸”,本身不占用存储内存;只有实例化后才会分配内存、存储数据。

类型是一个图纸,通过这个图纸创建实体对象。就好比类似是一个房子的图纸,通过这个图纸你可以盖一个个的房子。

一个类型由以下三部分定义:

  1. 名称
  2. 存储数据成员的数据结构
  3. 行为与约束

C#中,所有的都是类型,连内置的类型都是。

下面是两个内置的类型。short and int.

它的结构如下:

short 类型int 类型
名称:short名称:int
结构:占用 2 字节结构:占用 4 字节
行为:16 位整型行为:32 位整型
  • 名称:标识类型(int/string/ 自定义类名)
  • 存储结构:规定占用内存大小、字段布局(如 short 固定 2 字节)
  • 行为约束:规定该类型支持的运算、取值范围、内置方法(如 int 支持加减乘除,取值范围 -2^31 ~ 2^31-1

实例化(Instantiate)

拿着类型模板 new 出一个真实可用的数据对象

对象(object) = 实例(instance)

例如上面的int 和short 我们可以通过这些类型 去创建实例。下面是pi age nums 就是通过double int short这些类中的类型创建出来的实例了。

namespace HelloDemo 
{

    class Program
    {
        static void Main(string[] args)
        {
            double pi = 3.14;
            int age = 12;
            short nums = 23;
        }
    }

}Code language: JavaScript (javascript)

C#中,程序中所有变量、数据,没有例外都是某类型的实例,不存在无类型数据。

就好比上面的示例

示例 class C 是程序入口类,满足可执行文件要求:

  • 属于命名空间 MyProgram 下的自定义类型
  • 内部包含静态无返回值 Main 方法,是程序启动入口

C#中不止class一种类型

C# 所有可声明的类型:类 (class)、结构体 (struct)、接口 (interface)、枚举 (enum)、委托 (delegate)、记录 (record)

BCL(Base Class Library):.NET 内置标准类库,提供 int/short/string/List<T> 等系统预定义类型,开发者直接实例化使用。

Previous:
Next:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注