.net 哪一个是更好的单例类或共享(静态)成员函数

.net 哪一个是更好的单例类或共享(静态)成员函数,.net,vb.net,singleton,shared,.net,Vb.net,Singleton,Shared,我想了解通过Singleton类对VB.Net中类的共享(静态)成员使用常用方法的利弊。它可以是在时间、空间复杂性或最佳实践方面 我有一个BankAccount类,其中的方法执行一些业务逻辑 GetBalance() GetLast5Credits() GetMiniStatement() 还有一些写操作 在这种情况下,哪种访问成员函数的方法更好?共享还是单一?这取决于您的应用程序中是否有多个银行帐户。 基本上,静态或单例意味着您只能有一个相关对象的实例——在本例中为BankAccount。如

我想了解通过Singleton类对VB.Net中类的共享(静态)成员使用常用方法的利弊。它可以是在时间、空间复杂性或最佳实践方面

我有一个BankAccount类,其中的方法执行一些业务逻辑

GetBalance()
GetLast5Credits()
GetMiniStatement()
还有一些写操作


在这种情况下,哪种访问成员函数的方法更好?共享还是单一?

这取决于您的应用程序中是否有多个银行帐户。
基本上,静态或单例意味着您只能有一个相关对象的实例——在本例中为BankAccount。如果你问我,一家只有一个银行账户的银行是一家相当糟糕的银行这是一个相当不错的解释,但是示例代码是C#

格式的,这取决于您的应用程序中是否有多个银行帐户。
基本上,静态或单例意味着您只能有一个相关对象的实例——在本例中为BankAccount。如果你问我,一家只有一个银行账户的银行是一家相当糟糕的银行这是一个相当不错的解释,但是示例代码都不是用C语言编写的。您应该使用依赖注入实例。i、 e.您不会假设代码中只有一个实例。您恰好创建了一个实例。通过这种方式,您可以轻松地更改软件以使用多个实例

这里的基本思想是将银行帐户作为类构造函数中的参数:

class MyClass
{
  private readonly IBankAccount bankAccount;

  public MyClass(IBankAccount bankAccount)
  {
    this.bankAccount=bankAccount;
  }
}
由于如果需要传入大量内容,手动创建这样一个类可能会很烦人,因此通常使用依赖项注入器/IoC容器来完成


静态方法应该用于无状态副作用的辅助函数
Math
Enumerable
是静态方法的好例子


一般来说,您应该避免全局可变状态。银行账户显然是可变的。在这里,一个经典的单例是较小的缺点(您可以用它来代替实现进行测试),但它仍然是一个不好的选择。

两者都不是。您应该使用依赖注入实例。i、 e.您不会假设代码中只有一个实例。您恰好创建了一个实例。通过这种方式,您可以轻松地更改软件以使用多个实例

这里的基本思想是将银行帐户作为类构造函数中的参数:

class MyClass
{
  private readonly IBankAccount bankAccount;

  public MyClass(IBankAccount bankAccount)
  {
    this.bankAccount=bankAccount;
  }
}
由于如果需要传入大量内容,手动创建这样一个类可能会很烦人,因此通常使用依赖项注入器/IoC容器来完成


静态方法应该用于无状态副作用的辅助函数
Math
Enumerable
是静态方法的好例子


一般来说,您应该避免全局可变状态。银行账户显然是可变的。在这里,经典的单例是较小的缺点(您可以用实现代替测试目的),但它仍然是一个不好的选择。

就个人而言,为了单元测试,我更喜欢单例类。您可以模拟实例类,但不能模拟静态类。

就个人而言,为了单元测试,我更喜欢单例类。您可以模拟实例类,但不能模拟静态类。

我相信您也不想在这里模拟

但为了将来的参考,您所说的共享类不应该与维护状态有任何关系——每个静态方法应该只使用传入的参数。这使得此类仅对实用程序函数有用


只有当您在内存中持久化与帐户相关的数据时,单例在这里才有用。然后你可以实现一个单例作为索引器,包含一组银行账户记录,但你必须注意种族条件。

我相信你也不想在这里

但为了将来的参考,您所说的共享类不应该与维护状态有任何关系——每个静态方法应该只使用传入的参数。这使得此类仅对实用程序函数有用


只有当您在内存中持久化与帐户相关的数据时,单例在这里才有用。然后你可以实现一个单例作为索引器,包含一组银行账户记录,但你必须注意种族条件。

这肯定是重复的,但我懒得搜索。这肯定是重复的,但我懒得搜索。+1,但是,一个示例或至少一个链接将帮助人们理解您对
依赖注入实例
+1的含义,但一个示例或至少一个链接将帮助人们理解您对
依赖注入实例
的含义。