表示类型声明:类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义,以及开放或封闭构造的泛型类型。
using System;
using System.Reflection;
class Example
{
static void Main()
{
// 获取到String的类型
Type t = typeof(String);
// 通过String的Type获取到其中的元数据,下例是方法Substring,两个参数
MethodInfo substr = t.GetMethod("Substring",
new Type[] { typeof(int), typeof(int) });
// Invoke执行方法
Object result =
substr.Invoke("Hello, World!", new Object[] { 7, 5 });
Console.WriteLine("{0} returned \"{1}\".", substr, result);
}
}
Type是System.Reflection的根,是访问元数据的主要方式。使用Type的成员可以获取有关类型声明、类型成员(例如类的构造函数、方法、字段、属性和事件)以及部署该类的模块和程序集的信息。
引用类型,只会存一个对象的引用
引用类型有 class interface record delegate
值类型
int double float struct 元组(int, int)
class 没有重载运算符==的情况下虽然可以被比较,但不是比较其中每个属性的值,比较的是是否指向同一块内存
struct 没有重载运算==的情况下,是不可被比较的
record 可以被比较并且它比较的是所有的属性
泛型将类型参数的概念引用.NET,这样就可以设计具有以下特征的类和方法:
从c# 7.0开始启用元组功能,它提供了简洁的语法,用于将多个数据元素分组成一个轻型数据结构。
元组类型是值类型
如:(double, int) t1 = (4.5, 3)
(double t1, double t2) = (1, 2)
(double t1, double t2) a = (1, 2)
(double t1, double t2) v = (1, 2)
a==v true
元组可以做比较,比较个数及其成员逐个比较。
弃元相当于未赋值的变量;
(_, int b) = func();
(int, int) a = (1, 2);
Console.WriteLine(a.Item1);
Console.WriteLine(a.Item2);
(int b, int c) = a;
Console.WriteLine($"{b}, {c}");
(int, double) Func()
{
return (1, 1.2);
}
(int d, double e) = Func();
Console.WriteLine($"{d}, {e}");
//轻䡆交换两个数
int f = 1;
int g = 2;
(f, g) = (g, f);
Console.WriteLine($"{f}, {g}");
Action<int, double> actionA = null;
// 弃元的用法,我这里用不到int这个参数
actionA += (_, d) =>
{
Console.WriteLine(d + 3);
};
actionA(2, 1.2);
// 弃元在switch表达式中的使用
int switchA = 5 switch
{
1 => 2,
// 表示default,没有匹配到就走这里
_ => 5,
};
Console.WriteLine($"{switchA}");