实例/静态方法
可访问成员: public
, protected
, private
(如果继承则无法访问)
定义:相同的类/结构/接口(可以使用partial
关键字在文件中拆分)
称为:object.Method()
在这种情况下,我的意思是静态方法是在它们操作的类中定义的方法。也就是说,它们与其他类对象一起定义。MyPoint
(在示例代码的类中定义的静态方法。)
我们都知道(或应该知道)这些是什么以及它们的好处,我不会详细说明,只是说:
实例方法可以访问类的所有 private
、protected
和public
成员。方法也一样static
。
在大多数情况下,如果您要添加大量方法和/或属性,或者它们显着改变了对象的操作,您应该继承原始对象(如果可能)。public
这使您可以访问protected
.class/struct/interface
静态助手类方法
无障碍会员:public
定义:任何类/命名空间
称为:HelperClass.Method(object)
通过静态助手类方法,我暗示static
本节提到的方法的实际定义不在实际的类定义中。(即类似MyPointHelpers
或类似的类,使用您的代码示例。)
静态 Helper 类方法只能访问public
对象的成员(很像扩展方法,我在扩展方法部分之后编写了这部分)。
静态 Helper 类和扩展方法密切相关,并且在许多情况下是相同的。因此,我将在“扩展方法”部分中将这些好处留给他们。
扩展方法
无障碍会员:public
定义:任何类/命名空间
称为:object.Method()
扩展方法只能访问public
对象的成员。虽然他们看起来是班级的成员,但他们不是。这限制了它们的用途。(需要访问任何private
或protected
成员的方法不应是扩展。)
在我看来,扩展方法有三个巨大的好处。
假设您正在开发 class A
,并且 classA
中有大约 7 个方法。你也知道你想开发一些你并不总是需要的方法,但如果你这样做的话会很方便。您可以为此使用扩展方法。这些方法将被抽象到另一个类中,如果您以后需要它们,您可以在以后包含它们(按类,感谢 C# 6.0)。您知道以后要使用的不常见方法,但您知道您并不总是需要。
假设您正在开发程序A
,并且您正在使用 DLL 中的一个类Something.Other.C
,您不拥有该类的源代码。现在,您想添加一个与类交互的方法,该Something.Other.C
方法对实例或常规静态方法有意义,但您没有源代码所以不能!输入扩展方法,您可以在其中定义看似是 class 成员Something.Other.C
但实际上是代码的一部分的方法。
假设您开发了自己的库,并与很多您自己的应用程序一起使用,并且您在开发应用程序的过程中意识到您真的可以再次在类上X
使用方法。好吧,您可以在仅存在于application中的类上定义扩展方法,而不是修改 class 的定义(因为这需要更多工作,而且您不会在任何地方使用方法 application ) 。现在,您的方法开销仅限于 application 。应用程序不需要有这个扩展方法。Y
A
A
Y
X
Y
A
X
X
Z
表现
就性能而言,这将取决于方法、他们做什么以及他们是如何做到的。您将受制于public
您正在更改的对象上的任何属性/方法/字段,并且需要评估其性能。(如果调用public Value
而不是private value
导致一些显着的验证开销,实例方法更有意义,因为它可以使用private
字段或属性。)