C#基础—类1

https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/types/index

转载自微软官方文档;

相关概念:

1、对象:现实世界中的实体(世间万物皆对象)

2、类:具有相似属性和方法的对象的集合

3、面向对象程序设计的特点:封装 继承 多态

4、对象的三要素:属性(对象是什么)、方法(对象能做什么)、事件(对象如何响应)

☆相互关系:类是对象的抽象,对象是类的实例,类是一种抽象的分类,对象则是具体事物。

比如如果车是一个类,某个人的一辆奔驰车就是一个对象,车的颜色质量就是它的属性,启动、停止这些动作则可以定义为车的方法。

类型中可存储以下信息:

  • 类型变量所需的存储空间。

  • 可以表示的最大值和最小值。

  • 包含的成员(方法、字段、事件等)。

  • 继承自的基类型。

  • 在运行时分配变量内存的位置。

  • 允许执行的运算种类。

对于 .NET 中的类型系统,请务必了解以下两个基本要点:

  • 它支持继承原则。 类型可以派生自其他类型(称为基类型)。 派生类型继承(有一些限制)基类型的方法、属性和其他成员。 基类型可以继而从某种其他类型派生,在这种情况下,派生类型继承其继承层次结构中的两种基类型的成员。 所有类型(包括 System.Int32C# 关键字:int等内置数值类型)最终都派生自单个基类型,即 System.Object(C# 关键字:object这样的统一类型层次结构称为通用类型系统 (CTS)。 若要详细了解 C# 中的继承,请参阅继承

  • CTS 中的每种类型被定义为值类型或引用类型。 这包括 .NET 类库中的所有自定义类型以及你自己的用户定义类型。 使用 struct 关键字定义的类型是值类型;所有内置数值类型都是 structs使用 class 关键字定义的类型是引用类型。 引用类型和值类型遵循不同的编译时规则和运行时行为。

下图展示了 CTS 中值类型和引用类型之间的关系。

值类型和引用类型
CTS 中的值类型和引用类型

值类型

值类型派生自System.ValueType(派生自 System.Object)。 派生自 System.ValueType 的类型在 CLR 中具有特殊行为。 值类型变量直接包含它们的值,这意味着在声明变量的任何上下文中内联分配内存。 对于值类型变量,没有单独的堆分配或垃圾回收开销。

值类型分为两类:结构枚举

内置数值类型是结构,包含可以访问的属性和方法:

值类型为“密封”,这意味着不能从 System.Int32 派生类型,并且不能将结构定义为从任何用户定义的类或结构继承,因为结构只能从 System.ValueType 继承。 但是,一个结构可以实现一个或多个接口。 可将结构类型强制转换为接口类型;这将导致“装箱”操作,以将结构包装在托管堆上的引用类型对象内。 当将值类型传递到接受 System.Object 作为输入参数的方法时,将发生装箱操作。

使用 struct 关键字可以创建你自己的自定义值类型。 结构通常用作一小组相关变量的容器,如以下示例所示

public struct CoOrds
{
    public int x, y;

    public CoOrds(int p1, int p2)
    {
        x = p1;
        y = p2;
    }
}

另一种值类型是枚举枚举定义的是一组已命名的整型常量。

public enum FileMode
{
    CreateNew = 1,
    Create = 2,
    Open = 3,
    OpenOrCreate = 4,
    Truncate = 5,
    Append = 6,
}

所有枚举从 System.Enum(继承自 System.ValueType)继承。 适用于结构的所有规则也适用于枚举。

引用类型

定义为委托、数组或接口的类型是引用类型在运行时,当声明引用类型的变量时,该变量会一直包含值 null,直至使用 new 运算符显式创建对象,或者为该变量分配已经在其他位置使用 new 创建的对象,如下所示:

MyClass mc = new MyClass();  
MyClass mc2 = mc;  

接口必须与实现它的类对象一起初始化。 如果 MyClass 实现 IMyInterface,则按以下示例所示创建 IMyInterface 的实例:

IMyInterface iface = new MyClass();  

创建对象后,内存会在托管堆上进行分配,并且变量只保留对对象位置的引用。 对于托管堆上的类型,在分配内存和 CLR 自动内存管理功能(称为“垃圾回收”)回收内存时都会产生开销。 不过,垃圾回收功能也已经过高度优化,大多数情况下,都不会导致性能问题出现。

引用类型完全支持继承。 创建类时,可以继承自其他任何未定义为密封的接口或类,而其他类也可以继承自你的类并重写你的虚方法。

余生很长,愿我们都活成自己喜欢的样子
原文地址:https://www.cnblogs.com/bananana/p/8708858.html