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 自动内存管理功能(称为“垃圾回收”)回收内存时都会产生开销。 不过,垃圾回收功能也已经过高度优化,大多数情况下,都不会导致性能问题出现。
引用类型完全支持继承。 创建类时,可以继承自其他任何未定义为密封的接口或类,而其他类也可以继承自你的类并重写你的虚方法。