0Pricing
C# Academy · 课时

多态行为

使用基于接口的多态统一处理混合形状,在不修改调用方的情况下添加新形状,并组合小型行为。

多态行为 是 CoddyKit 上的免费 C# Academy 课时。 这是第 3 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C# Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C# Academy 课程共包含 3 节课。

多态概览

目标:使用多态让调用方保持简单。

  • 始终使用 IShape 进行处理
  • 在同一个列表中混合多种形状
  • 添加新形状时无需修改现有代码
  • 组合微小的行为(格式化、筛选)

适用于所有形状的统一接口

让辅助工具接受 IShape 接口。运行时分派会选择正确的实现。

using System;

public interface IShape
{
  double Area();
  double Perimeter();
}

public sealed class Rectangle : IShape
{
  private readonly double _w, _h;
  public Rectangle(double w, double h) { _w = w; _h = h; }
  public double Area() { return _w * _h; }
  public double Perimeter() { return 2 * (_w + _h); }
}

public sealed class Circle : IShape
{
  private readonly double _r;
  public Circle(double r) { _r = r; }
  public double Area() { return 3.14159 * _r * _r; }
  public double Perimeter() { return 2 * 3.14159 * _r; }
}

public class Program
{
  // One function works for any IShape (dynamic dispatch on overrides)
  static void PrintSummary(IShape s)
  {
    Console.WriteLine("A=" + s.Area() + " P=" + s.Perimeter());
  }

  public static void Main(string[] args)
  {
    PrintSummary(new Rectangle(3, 4));
    PrintSummary(new Circle(2));
  }
}

混合列表处理

将多个形状存储在 列表<IShape> 中。迭代过程保持简单,而行为会因实例而异。

using System;
using System.Collections.Generic;

public interface IShape { double Area(); double Perimeter(); }

public sealed class Rectangle : IShape
{
  private readonly double _w, _h;
  public Rectangle(double w, double h) { _w = w; _h = h; }
  public double Area() { return _w * _h; }
  public double Perimeter() { return 2 * (_w + _h); }
}

public sealed class Circle : IShape
{
  private readonly double _r;
  public Circle(double r) { _r = r; }
  public double Area() { return 3.14159 * _r * _r; }
  public double Perimeter() { return 2 * 3.14159 * _r; }
}

public class Program
{
  public static void Main(string[] args)
  {
    List<IShape> shapes = new List<IShape>();
    shapes.Add(new Rectangle(2, 5));
    shapes.Add(new Circle(1.5));
    shapes.Add(new Rectangle(1, 1));

    foreach (IShape s in shapes)
    {
      Console.WriteLine("A=" + s.Area());
    }
  }
}

开放扩展

多态支持开放扩展:新形状可以接入,而无需编辑现有调用方。

using System;

public interface IShape { double Area(); double Perimeter(); }

public sealed class Triangle : IShape
{
  private readonly double _a, _b, _c;
  public Triangle(double a, double b, double c) { _a = a; _b = b; _c = c; }
  public double Perimeter() { return _a + _b + _c; }
  public double Area()
  {
    double s = (_a + _b + _c) / 2.0;
    return Math.Sqrt(s * (s - _a) * (s - _b) * (s - _c));
  }
}

public class Program
{
  // Existing helper still works; no changes needed
  static void Show(IShape s) { Console.WriteLine("A=" + s.Area() + " P=" + s.Perimeter()); }

  public static void Main(string[] args)
  {
    Show(new Triangle(3, 4, 5)); // new type plugs in
  }
}

行为组合(策略)

通过小型接口(例如格式化器)组合微小行为。无需修改形状即可替换策略。

using System;

public interface IShape { double Area(); double Perimeter(); }

public sealed class Rectangle : IShape
{
  private readonly double _w, _h;
  public Rectangle(double w, double h) { _w = w; _h = h; }
  public double Area() { return _w * _h; }
  public double Perimeter() { return 2 * (_w + _h); }
}

// Small strategy interface for formatting
public interface IShapeFormatter
{
  string Format(IShape s);
}

public sealed class SimpleFormatter : IShapeFormatter
{
  public string Format(IShape s) { return "A=" + s.Area() + " P=" + s.Perimeter(); }
}

public class Program
{
  static void Print(IShape s, IShapeFormatter f)
  {
    Console.WriteLine(f.Format(s));
  }

  public static void Main(string[] args)
  {
    Print(new Rectangle(3, 2), new SimpleFormatter());
  }
}

多态提示

提示:

  • 将 IShape 传给辅助工具;避免类型检查。
  • 尽可能让辅助工具保持小巧且纯粹。
  • 自由添加新形状;不要修改现有调用方。
  • 使用小型行为接口(格式化、筛选)来扩展功能。

接口的好处

快速检查:在这个库中,针对 IShape 接口进行编程的主要好处是什么?

回顾

回顾:将参数声明为 IShape,处理混合列表,并在不触碰调用方的情况下添加形状。组合用于格式化或筛选的小型行为,让代码保持灵活。

常见问题解答

「多态行为」课时是免费的吗?

是的 — 「多态行为」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C# Academy 课程的其余内容,请升级到 CoddyKit PRO。 C# Academy 课程共包含 3 节课。

「多态行为」这节课中我会学到什么?

使用基于接口的多态统一处理混合形状,在不修改调用方的情况下添加新形状,并组合小型行为。 你通过在浏览器中直接运行的动手代码来练习 C# Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 C# Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 C# Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 3 节。

「多态行为」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 C# Academy 课中编写并运行代码吗?

能。每节 C# Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 设计(接口与继承)
  2. 实现与测试
  3. 多态行为
← 返回 C# Academy