1
|
Steve Dunn supercat · 技术社区 · 14 年前 |
![]() |
1
3
这主要是因为您希望在接口上执行一些常见的操作,但是由于接口没有实现,所以我们不能。 另一次,我将创建扩展方法,用于我不拥有的类型,但希望将一系列操作封装到单个方法中。 |
![]() |
2
4
扩展方法对于扩展没有源代码的类非常有用,特别是如果您想扩展一组从特定基派生的类,但又不想创建自己的派生版本来添加新方法。当您要扩展实现一个或多个接口的某些类时,它们也很有用,但不能使它们都派生自基类。我真的不会用它们来做别的。 |
![]() |
3
0
一个简单的例子:假设在基础域模型中,您可能有一个学生实体,它封装了所有的核心操作,如注册、参加、推迟等。假设项目中的一个子系统允许学生注册工作通知,并在发布新工作时通过电子邮件通知。像student.registerForJob和student.notifyJobPosting这样的行为并不是真正的核心功能。因此,尽管我拥有学生类代码的完全访问权限,但我不会将这些行为添加到学生核心实体中,因为它可能会打破您的设计边界或原则(例如open/closed或YAGNI),相反,仅在招聘子系统中为学生实体创建这些扩展方法更有意义。 显然,通过继承对Student进行子分类也可以让您实现相同的功能,但是扩展方法显然提供了一种非常灵活的替代方法。从本质上讲,可拓方法是实现装饰设计模式应用的一种方法。更多地了解使用decorator设计模式的动机可能会进一步澄清这些疑问。 |
![]() |
Codebadger · 将泛型传递给扩展方法 7 年前 |
![]() |
Otman IGHOULASSEN · 从子类调用基类的扩展方法 7 年前 |
![]() |
sirksel · 拳击弦场或扩展Kotlin中所有弦的替代方案? 7 年前 |
![]() |
Roman · 在Swift中使用布尔的视图控制器扩展 7 年前 |
![]() |
Mercato · 为什么协议默认值必须通过Swift中的扩展来实现? 7 年前 |