强类型的泛型
强类型”= 编译器把“类型”当成硬规则,任何类型不符的操作直接拒绝编译,而不是等到运行时才崩溃。
用生活比喻
把变量看成不同形状的积木孔,强类型语言里:圆孔只能插圆积木,方孔插圆积木——编译器立刻报警“插不进去”;弱类型则先让你硬插,运行时才可能散架。
代码对照(C# vs JavaScript)
// C# —— 强类型
int x = 3;
string s = x; // ❌ 编译直接失败:无法将 int 隐式转为 string
// JavaScript —— 弱类型
let x = 3;
let s = x;
泛型 = 把“类型”当成参数传给代码,写一次就能让编译器帮你生成任意类型的版本,既安全又省得复制粘贴。
最简单的例子(C#)
// 1. 定义:T 就是“类型参数”
public class Pocket<T>
{
private T _thing;
public void Put(T item) => _thing = item;
public T Get() => _thing;
}
// 2. 使用:想放什么类型就写什么类型
var p1 = new Pocket<int>(); // 只装 int
p1.Put(42);
int x = p1.Get(); // 不用强转,直接是 int
var p2 = new Pocket<string>(); // 只装 string
p2.Put("hello");
string s = p2.Get(); // 同样不用强转
编译器会自动生成两份代码:一份专门放
int,一份专门放 string,全程类型安全,没有装箱,也不用 (object) 来回倒腾。
浙公网安备 33010602011771号