ReSharper 2025.2 Help

创建装饰器

装饰器设计模式用于动态地为对象添加额外的行为。 此外,通过使用接口,装饰器可以像多重继承一样统一类型。

让我们举个例子——假设您有两个对象,分别叫做 蜥蜴 ,您希望将它们放入装饰器中:

class Bird { public void Fly() { ... } } class Lizard { public void Walk() { ... } }

1. 使用提取接口重构获取对象接口

由于装饰器不能同时继承这两个类,我们可以从 重构 菜单 Control+Shift+R 中调用 提取接口重构 以获取这两个对象的接口:

使用 ReSharper 创建装饰器

调用此重构会弹出一个窗口,询问我们哪些成员应出现在接口中:

使用 ReSharper 创建装饰器

对这两个类执行此操作后,我们得到以下代码:

internal interface IBird { void Fly(); } class Bird : IBird { public void Fly() { ... } } internal interface ILizard { void Walk(); } class Lizard : ILizard { public void Walk() { ... } }

2. 声明一个装饰器类

通过这些接口,我们可以创建一个装饰器。 首先,我们声明一个名为 的类,表明它实现了 IBirdILizard

class Dragon : IBird, ILizard { ... }

现在是聚合成员。 最简单的方法是先将它们声明为字段,即:

class Dragon : IBird, ILizard { private Bird bird; private Lizard lizard; }

3. 使用快速修复初始化未使用的字段

现在,我们可以对未使用的字段应用 快速修复 ,并从构造函数参数中初始化它们:

使用 ReSharper 创建装饰器

完成后,我们的类将如下所示:

class Dragon : IBird, ILizard { private Bird bird; private Lizard lizard; public Dragon(Bird bird, Lizard lizard) { this.bird = bird; this.lizard = lizard; } }

4. 为源对象生成委托成员。

现在是最后的润色——我们希望为 bird 和 lizard 生成委托成员。 这很简单——我们打开生成菜单 Alt+Insert 并选择 委托成员

使用 ReSharper 创建装饰器

ReSharper 然后会询问我们需要委托哪些成员:

使用 ReSharper 创建装饰器

最终结果如下:

class Dragon : IBird, ILizard { public void Fly() { bird.Fly(); } public void Walk() { lizard.Walk(); } private Bird bird; private Lizard lizard; public Dragon(Bird bird, Lizard lizard) { this.bird = bird; this.lizard = lizard; } }

就是这样! 我们的装饰器已经准备好了。

最后修改日期: 2025年 9月 27日