首页 > 代码库 > C#泛型回顾点滴
C#泛型回顾点滴
前言
C#的泛型一直是学习者津津乐道的课题了,这确实是一个非常有用的特性,不过在实际使用中,还是有很多需要注意的地方,我们需要通过自己动手实践以及结合理论进行理解,最终总结出自己的编码规范和最佳实践
案例1
internal struct TestStruct : IEquatable<TestStruct>{ bool IEquatable<TestStruct>.Equals(TestStruct other) { return true; }}internal class TesterClass{ // Methods public static bool AreEqual<T>(T arg1, T arg2) where T : IEquatable<T> { return arg1.Equals(arg2); } public static void Run() { TestStruct t1 = new TestStruct(); TestStruct t2 = new TestStruct(); Debug.Assert(((IEquatable<TestStruct>)t1).Equals(t2)); Debug.Assert(AreEqual<TestStruct>(t1, t2)); }}
案例2
class Program{ static void Main(string[] args) { Print1(1); Print2(1); Print3(1); string a = "ABC"; string b = "AB"; string c = b + "C"; bool genericEquals = IsEquals<string>(a, c); bool directEquals = (a == c); Console.ReadKey(); } static void Print1<T>(T item) where T : struct { string s = item.ToString(); } static void Print2<T>(T item) { string s = item.ToString(); } static void Print3(int item) { string s = item.ToString(); } static bool IsEquals<T>(T t1, T t2) where T : class { return t1 == t2; }}
思考以上代码,在内部是怎样的执行过程?结果如何?为什么?
要点
- 泛型中的装箱和拆箱
- 泛型中的逆变与协变
未完待续、、、
C#泛型回顾点滴
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。