何时在.NET中使用共享方法

5

我有些混淆,希望有人能为我澄清这个问题。

在以下情况下,我应该使用共享方法/函数吗:

我有一个名为“Person”的通用类。该类代表数据库中的一个人。

我有一个名为“PersonManager”的管理类。该类包含添加、更新、删除单个Person对象的方法。还存在一种从数据库查找Persons的方法。

这些管理类中的方法应声明为共享方法吗?或者每次都创建PersonManager类的新实例并调用相应的方法更合适。

如果是共享的:

PersonManager.AddPerson(NewPerson)

共享和非共享的对比:

Dim MyPersonManager as PersonManager
MyPersonManager.AddPerson(NewPerson)

查询人员时,共享版本如下:
Dim dt as New DataTable
dt = PersonManager.GetPersons

相对于非共享版本:

Dim dt as New DataTable
Dim MyPersonManager as New PersonManager
dt = MyPersonManager.GetPersons

4
这是C#的答案:https://dev59.com/53VC5IYBdhLWcg3wnCWA 将“static”一词替换为“shared”,即可得到VB答案。 - Bob
2个回答

2
当静态方法不与特定对象相关联时,请使用静态方法(在 Visual Basic 中共享)。它们不需要任何状态来执行其任务。
请参阅 MSDN 上的“Static Classes and Static Class Members”:http://msdn.microsoft.com/en-us/library/79b3xss3(VS.80).aspx

即使没有创建类的任何实例,也可以在类上调用静态方法、字段、属性或事件。如果创建了类的任何实例,则无法使用它们来访问静态成员。只有一个静态字段和事件的副本存在,静态方法和属性只能访问静态字段和静态事件。 静态成员通常用于表示不随对象状态而变化的数据或计算;例如,数学库可能包含用于计算正弦和余弦的静态方法。

在您的情况下,如果 `PersonManager` 包含某些对象状态,则可能不希望使用静态方法。相反,您应该能够创建多个 `PersonManager` 对象并单独操作它们。

所以在这个例子中,PersonManager被认为是包含对象状态的吗?目前,我觉得PersonManager只是在执行某些操作而没有持有任何东西。我只是想知道最佳实践。另一个例子可能是处理错误。当一个方法用于向某人发送包含异常错误的电子邮件时。对于这种情况,使用共享/状态方法似乎是最好的选择,是吗? - Michael

1

谢谢提供链接!我最近一直在使用VB,没有考虑过C#方面的事情。 - Michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接