C# 泛型接口 泛型类实现接口

C# 泛型接口  泛型类实现接口 一、泛型接口 核心语法1. 定义格式在接口名后加T方法中直接使用泛型 T方法后不需要加T//泛型接口支持任意类型做加减规则 internal interface IcalT { T Add(T a, T b); T Sub(T a, T b); }2. 解决的痛点普通接口写死int Add(int a,int b)只能数字相加泛型接口适配所有类型int、string、自定义类全部支持。二、泛型接口的两种实现方式必考重点方式1普通类实现泛型接口关闭泛型实现接口时直接指定具体类型T 被固定死。特点一个类只服务一种固定类型① Calc2 实现 int 类型接口public class Calc2 : Icalint { public int Add(int a, int b) { return a b; } public int Sub(int a, int b) { return a - b; } }② Calc3 实现 string 类型接口public class Calc3 : Icalstring { //字符串拼接 public string Add(string a, string b) { return a b; } //自定义字符串减法包含则替换 public string Sub(string a, string b) { if (a.Contains(b)) { return a.Replace(b, x); } return a; } }运行结果Calc2 10 20 30 10 - 20 -10 Calc3 aa aa a-a x方式2泛型类实现泛型接口保留泛型如果不想固定接口类型由调用时动态决定类型必须在类名后也加T让类的泛型传递给接口// 类的T 决定 接口的T public class Calc1T : IcalT { public T Add(T a, T b) { // 不是所有类型都支持 、- 运算符 return default(T); } public T Sub(T a, T b) { return default(T); } }核心规则必背接口是泛型、类也想通用 →类必须也定义成泛型类由对象实例化时 类型统一确定接口类型无法运算类型返回default(T)默认值调用演示// T int Calc1int c new Calc1int(); Console.WriteLine(c.Add(10, 20)); // int默认值 0 // T string Calc1string c1 new Calc1string(); Console.WriteLine(c1.Sub(ss, sss)); // string默认值 null三、两种实现方式对比总结实现方式写法特点适用场景普通类实现泛型接口Ical具体类型类型固定、逻辑可定制不同类型有专属运算逻辑int加减、字符串加减泛型类实现泛型接口类T : IcalT类型灵活、通用模板统一逻辑、不区分具体类型四、重点易错点泛型接口接口名带T方法不带T普通类实现泛型接口 →必须写死具体类型想要接口类型动态可变 →类必须也是泛型类泛型 T 不能默认支持加减乘除运算非数值类型返回default(T)string没有减法运算符可自定义业务减法逻辑案例中替换字符五、完整运行输出结果30 -10 x aa 0六、满分背诵口诀泛型接口后面T方法只用不用写普通类实现定类型专属逻辑自己整泛型类实现传T类型调用才确定通用类型无运算默认值来兜底整