理解.NET泛型:从演员选拔实例出发

需积分: 0 0 下载量 62 浏览量 更新于2024-08-30 收藏 90KB PDF 举报
"从.NET开发基础的角度讲解泛型的使用,通过实例分析如何理解和应用泛型。" 在.NET框架中,泛型是一种强大的编程工具,它允许我们创建类型参数化的类、接口、方法和委托,从而提高了代码的复用性和效率。在上述例子中,我们通过一个简单的选拔演员的故事来引入泛型的概念。 首先,我们有一个`Boy`类,代表男演员,包含姓名和身高的属性。然后,我们创建了一个`Compare`类,其中有一个`WhoIsBetter`方法,用于比较两个男演员的身高并返回较高的那个。这是一个具体的实现,针对男演员的特性(身高)进行了硬编码。 然而,当需求变化,需要选拔女演员时,我们发现原有的`Compare`类不再适用,因为选拔标准不同(体重而非身高)。于是,我们不得不为女演员创建一个新的类`Girl`,并添加对应的选拔方法。这暴露了代码的局限性,即对特定类型的依赖。 泛型的引入可以解决这个问题。我们可以定义一个通用的`Actor`类,用类型参数T表示演员的特性。例如: ```csharp public class Actor<T> { public T Trait { get; set; } public string Name { get; set; } public Actor(T trait, string name) { Trait = trait; Name = name; } } ``` 然后,对于身高和体重,我们可以创建两个结构体(`Height`和`Weight`),分别代表这些特性。这样,`Compare`类可以改写为接受任何类型参数的演员进行比较: ```csharp public class Compare { public Actor<T> WhoIsBetter<T>(Actor<T> actor1, Actor<T> actor2) where T : IComparable<T> { return actor1.Trait.CompareTo(actor2.Trait) > 0 ? actor1 : actor2; } } ``` 现在,我们可以在选拔时传入不同的特性和演员类型,无论是身高还是体重,只要它们实现了`IComparable<T>`接口,就可以进行比较。这展示了泛型的灵活性和可扩展性。 测试代码可以如下所示: ```csharp static void Main(string[] args) { Actor<int> boy1 = new Actor<int>("潘长江", 165); Actor<int> boy2 = new Actor<int>("刘德华", 175); Console.WriteLine(new Compare().WhoIsBetter(boy1, boy2).Name); Actor<int> girl1 = new Actor<int>("范冰冰", 55); Actor<int> girl2 = new Actor<int>("赵丽颖", 45); Console.WriteLine(new Compare().WhoIsBetter(girl1, girl2).Name); Console.ReadLine(); } ``` 这样,我们无需为每个新需求创建新的类和方法,只需使用泛型即可适应变化,提高了代码的可维护性和重用性。这就是.NET中泛型的基本应用和重要性。通过泛型,我们可以编写更加灵活、高效且类型安全的代码,减少了类型转换的开销,并增强了设计的灵活性。