一个关于泛型约束的问题

*申明,本文引自 《Accelarated C# 2008》一书 废话不多说,直接看例子

using System;

using System.Collections.Generic;

public interface IShape

{

  double Area

  {

     get;

   }

 }

public class Circle : Ishape

{

  public Circle(double radius)

  {

   this.radius = radius;

   }

   public double Area

  {

    get

      {

         return 3.1415 * radius* radius

       }

   }

  private double radius;

}

public class Rect : IShape

{

  public Rect(double width,double height)

  {

    this.width = width;

    this.height = height;

  }

  public double Area

  {

    get

      {

         return width * height;

      }

  }

  private double width;

  private double height;

}

public class Shapes

{

  public double TotalArea

  {

    get

      {

         double acc = 0

        {

        forearch(T shape in shapes)

        {

          acc +=shape.Area;

        }

      return acc;

      }

  }

  public void add(T shape)

  {

    shapes.Add( shape);

  }

  private List shapes =new List()

  }

-----------------------以下是测试类-----------------------------

public class EntryPoint

  {

    static void Main()

    {

      Shapes shapes =new Shapes() ;

      shapes.Add(new Circle(2));

      shapes.Add(new Rect(3,5));

      Console.WriteLine("Total Area :{0}",shapes.TotalArea);

     }

  }

测试类的目的是计划出Rect,Circle两个面积数字之和,可是这段代码编译不会通过,因为在实列化Circle,Rect的时候,泛型并不知道Area属性的存在,必须实现Contact,代码可修改为

public double TotalArea

{

  get

  {

    double acc = 0 ;

    {

      forearch(T shape in shapes)

      {

        IShape theShape =(IShape) shape;//加上结口实现

        acc +=shape.Area;

      } return acc;

    }

}

为了确保T类型都有Area属,可以在类定义时就加上Contact,写法为 public class Shapes where T : IShape 这样T类型必须实现IShape结口,否则编译不通过

posted @   赵一村  阅读(366)  评论(3编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示