C# 基础篇14-23

14. 在 C# 中的结构与传统的 C 或 C++ 中的结构不同。C# 中的结构有以下特点:

  • 结构可带有方法、字段、索引、属性、运算符方法和事件。
  • 结构可定义构造函数,但不能定义析构函数。但是,您不能为结构定义无参构造函数。无参构造函数(默认)是自动定义的,且不能被改变。
  • 与类不同,结构不能继承其他的结构或类。
  • 结构不能作为其他结构或类的基础结构。
  • 结构可实现一个或多个接口。
  • 结构成员不能指定为 abstract、virtual 或 protected。
  • 当您使用 New 操作符创建一个结构对象时,会调用适当的构造函数来创建结构。与类不同,结构可以不使用 New 操作符即可被实例化。
  • 如果不使用 New 操作符,只有在所有的字段都被初始化之后,字段才被赋值,对象才被使用。

14.1 类 vs 结构

类和结构有以下几个基本的不同点:

  • 类是引用类型,结构是值类型。
  • 结构不支持继承。
  • 结构不能声明默认的构造函数。

15. 枚举

enum
{
enumeration list // 默认从0开始
};

16. 类(Class)

class class_name
{
// member variables
variable1;
// member methods
method1(parameter_list)
{
// method body
}
}

  • 访问标识符 指定了对类及其成员的访问规则。如果没有指定,则使用默认的访问标识符。类的默认访问标识符是 internal,成员的默认访问标识符是 private。
  • 数据类型 指定了变量的类型,返回类型 指定了返回的方法返回的数据类型。
  • 如果要访问类的成员,你要使用点(.)运算符。
  • 点运算符链接了对象的名称和成员的名称。

【类的 构造函数】 是类的一个特殊的成员函数,当创建类的新对象时执行。构造函数的名称与类的名称完全相同,它没有任何返回类型。默认的构造函数没有任何参数。但是如果你需要一个带有参数的构造函数可以有参数,这种构造函数叫做参数化构造函数。
【类的 析构函数】 是类的一个特殊的成员函数,当类的对象超出范围时执行。析构函数的名称是在类的名称前加上一个波浪形(~)作为前缀,它不返回值,也不带任何参数。析构函数用于在结束程序(比如关闭文件、释放内存等)之前释放资源。析构函数不能继承或重载。
【类的静态成员】使用 static 关键字把类成员定义为静态的。当声明一个类成员为静态时,意味着无论有多少个类的对象被创建,只会有一个该静态成员的副本。关键字 static 意味着类中只有一个该成员的实例。静态变量用于定义常量,因为它们的值可以通过直接调用类而不需要创建类的实例来获取。静态变量可在成员函数或类的定义外部进行初始化。也可以在类的定义内部初始化静态变量。成员函数声明为 static。这样的函数只能访问静态变量。静态函数在对象被创建之前就已经存在。

17. 继承 属于IS-A关系,不支持多重继承

  • 可以使用接口来实现多重继承

public interface InterfaceB {
int test(int arg1);
}

18. 多态性

多态性可以是静态的或动态的。在静态多态性中,函数的响应是在编译时发生的。在动态多态性中,函数的响应是在运行时发生的。

  • 静态多态性(函数的重载-参数列表,个数,返回类型?;运算符的重载-operator-must be declared static and public)
    +, -, !, ~, ++, -- 这些一元运算符只有一个操作数,且可以被重载。
    +, -, *, /, % 这些二元运算符带有两个操作数,且可以被重载。
    ==, !=, <, >, <=, >= 这些比较运算符可以被重载。
    &&, || 这些条件逻辑运算符不能被直接重载。
    +=, -=, *=, /=, %= 这些赋值运算符不能被重载。
    =, ., ?:, ->, new, is, sizeof, typeof 这些运算符不能被重载。
    public static Box operator+ (Box b, Box c)
    Box boxa = boxB + boxC;

  • 动态多态性(抽象类-抽象方法 abstract 与sealed互斥,密封类;虚方法-virtual-override)
    abstract class Shape {
    abstract public int area();
    }

public virtual void Draw()
public override void Draw()

19. 命名空间

namespace,using,嵌套
namespace namespace_name{
namespace namespace_name_inner {
}
}

  1. using指令:引入命名空间
    这是最常见的用法,例如:
    using System;
    using Namespace1.SubNameSpace;
  2. using static 指令:指定无需指定类型名称即可访问其静态成员的类型
    using static System.Math;var = PI; // 直接使用System.Math.PI
  3. 起别名
    using Project = PC.MyCompany.Project;
  4. using语句:将实例与代码绑定
    using (Font font3 = new Font("Arial", 10.0f),
    font4 = new Font("Arial", 10.0f))
    {
    // Use font3 and font4.
    }
    代码段结束时,自动调用font3和font4的Dispose方法,释放实例。

20. 预处理器指令

21. 正则表达式

22. 异常处理

23. 文件的输入与输出

你可能感兴趣的:(C# 基础篇14-23)