0%

C#理论基础

C#简介

C#(See Sharp)是一种完全面向对象的语言,需要自己定义类型以及行为

可以从与C++的区别入手:

  1. 作为C++的后续版,C#能做到的C++都能做到,但C++更为复杂,C#主打的就是一个效率
  2. C#被研发初就是用来编写.NET平台,.NET是一个十分模糊的概念,它是一个跨平台开源开发人员平台,可用于构建多种应用程序。.NET包含一类库和CLR虚执行系统,过多的不赘述,总之C#所编写的源代码会被编译为符合CLI规范的中间语言IL,IL会在C#程序执行时被CLR编译为本机指令。当然对于C#本身这种涉及的内容太多,略微了解即可,有点类似于C++编译的一系列操作
  3. C++不允许在一个构造函数中调用另外一个构造函数,而C#允许
  4. 上述只是用于初步了解的部分特点,当然最重要的是C#是完全面向对象的语言,更注重实际应用

.NET主要功能

  • 垃圾回收(自动内存管理)

    为应用程序管理内存的分配和释放,意味着对开发人员来说,不必编写执行内存管理任务的代码,可以不用考虑内存管理的经典问题,例如忘记释放对象并导致内存泄漏,或尝试访问已释放对象的内存

  • 代码质量分析

    和visual studio中错误分析类型的东西

...(待补充)

Hello world

using System;

class Hello
{
static void Main()
{
Console.WriteLine("Hello, World");
}
}

using System引用System命名空间,提供了一种用于组织C#程序和库的分层方法。命名空间包含类型和其他命名空间,如System(Console类和IO、Collections命名空间)

看起来像是C++中using与include的归类版

声明Hello类,其中的成员main用static修饰符进行声明,按约定Main静态函数是C#程序的入口点

Console类中的WriteLine函数用于输出,由标准类库提供,默认情况下编译器会自动引用标准类库。

由于System命名空间的引用,System.Console.WriteLine可直接写为Console.WriteLine

类型和变量

类型

两种类型:值类型和引用类型

值类型变量包含数据

引用类型的变量存储对数据/对象的引用

  • 两个变量可以引用同一个对象
  • 对一个变量执行的运算可能会影响另一个变量引用的对象

标识符是变量名称,如果前缀为@,则可能是C#保留字

一些文档内容:

  • 值类型

    • 简单类型

    • 枚举类型

      • enum E {...} 格式的用户定义类型。 enum 类型是一种包含已命名常量的独特类型。 每个 enum 类型都有一个基础类型(必须是八种整型类型之一)。 enum 类型的值集与基础类型的值集相同。
    • 结构类型

      • 格式为 struct S {...} 的用户定义类型
    • 可以为 null 的值类型

      • 值为 null 的其他所有值类型的扩展
    • 元组值类型

      • 格式为 (T1, T2, ...) 的用户定义类型
  • 引用类型

    • 类类型

      • 其他所有类型的最终基类:object
      • Unicode 字符串string,表示 UTF-16 代码单元序列
      • 格式为 class C {...} 的用户定义类型
    • 接口类型

      • 格式为 interface I {...} 的用户定义类型
    • 数组类型

      • 一维、多维和交错。 例如:int[]int[,]int[][]
    • 委托类型

      • 格式为 delegate int D(...) 的用户定义类型

类型声明

  • class类型定义包含数据成员(字段)和函数成员的数据结构。支持单元继承和多态
  • struct类型定义包含数据成员和函数成员的结构(类似于class)

区别如下:

struct为值类型,class为对象类型

struct不能被继承,class能被继承

struct 默认的访问权限是public,而class 默认的访问权限是private

......

值类型适合存储供 C#应用程序操作的数据

引用类型应该用于定义应用程序的行为

  • interface类型定义为一组已命名的公共成员。 实现 interfaceclassstruct 必须提供接口成员的实现代码。 interface 可以继承自多个基接口,classstruct 可以实现多个接口。
  • delegate 类型表示引用包含特定参数列表和返回类型的方法。

C# 采用统一的类型系统,因此任意类型的值都可视为 object。 每种 C# 类型都直接或间接地派生自 object 类类型,而 object 是所有类型的最终基类。 只需将值视为类型 object,即可将引用类型的值视为对象。 通过执行装箱取消装箱操作,可以将值类型的值视为对象。 在以下示例中,int 值被转换成 object,然后又恢复成 int

int i = 123;
object o = i;    // Boxing
int j = (int)o;  // Unboxing