理解.NET泛型:从演员选拔实例出发
需积分: 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中泛型的基本应用和重要性。通过泛型,我们可以编写更加灵活、高效且类型安全的代码,减少了类型转换的开销,并增强了设计的灵活性。
2023-05-15 上传
1124 浏览量
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情