【发布时间】:2015-08-12 17:35:45
【问题描述】:
我对在 C# 中使用方法与对象进行交互的不同方式感到有些困惑,尤其是以下主要设计差异和后果:
- 调用实例方法
- 在 POCO 上使用静态类
- 创建扩展方法
例子:
public class MyPoint
{
public double x { get; set; }
public double y { get; set; }
public double? DistanceFrom(MyPoint p)
{
if (p != null)
{
return Math.Sqrt(Math.Pow(this.x - p.x, 2) + Math.Pow(this.y - p.y, 2));
}
return null;
}
}
如果您可以通过简单地在类定义中放置一个方法来实现所需的结果,那么为什么将 POCO 与静态辅助类或扩展方法结合使用会更好?
【问题讨论】:
-
如果你没有类定义呢?现在您需要一个静态帮助程序类或扩展方法。扩展方法允许您扩展类您不拥有其源代码。它们还允许您删除一些不太常见的函数,将它们放在您仍然可以访问的其他地方如果您需要,但默认情况下不包括在内。
-
@EBrown,有趣,我从来没有这样想过。
-
你也可以在接口上定义扩展方法。
-
这是扩展方法的优点之一:假设您希望通过包含方法
DoSomethingCooler()来扩展类A,但是类A的定义存在于命名空间EBrown.NamespaceB中单独的 DLL 你不拥有源代码,你可以定义一个扩展方法到类A允许你调用A.DoSomethingCooler()就像你拥有源代码一样。缺点:私有成员仍然是私有的。
标签: c# extension-methods poco static-classes instance-methods