2.枚举类型(Enum Type),由一组命名常量定义,表示一个选项或选项组合。
public struct Nullable<T> where T : struct可以使用Struct约束来指定一个类型参数是不可空的值类型(结构类型和枚举类型都满足约束)。值类型不能被继承,因为所有值类型最终会编译成终结类(sealed),但结构体可以实现接口。
public struct Location { public double X; public double Y; public Location(double x, double y) => (X, Y) = (x, y); }分别实例化具有相同数据的值对象a和b,进行相等判断,输出结果如下:
var a = new Location(1, 2); var b = new Location(1, 2); Console.WriteLine(a.Equals(b)); // true b.Y = 3; Console.WriteLine(a.Equals(b)); // false由此可见:值类型相等比较的是数据本身。
string a = "123"; string b = a; a = "456"; Console.WriteLine(a); // "456" Console.WriteLine(b); // "123"记录(record): C#9.0中引入,它不是一个新的语法,而是语法糖。用来定义一个引用类型,该类型提供内置封装数据功能。
public record Person(string FirstName, string LastName);下面是一个自定义的类:
public class Location { public double X; public double Y; public Location(double x, double y) => (X, Y) = (x, y); }同样分别实例化具有相同数据的引用对象a和b,进行相等判断,输出结果如下:
var a = new Location(1,2); var b = new Location(1,2); var c = b; Console.WriteLine(a == b); // false Console.WriteLine(a.Equals(b)); // false Console.WriteLine(b == c); // true由此可见:引用类型相等比较的是引用地址,而不是数据本身。