c# - 静态类...这样做可以吗?

标签 c# class static

我阅读了何时在 C# 中使用静态类,但最上面的答案不一定能回答我的问题。我有一个通过 HTTP 服务器与相当多的类似硬件接口(interface)的应用程序。每个设备都必须登录,并且凭据通常是相同的。我正在使用 Properties.Settings.Default.etc 来处理应用程序范围的设置;但是,为了方便起见,我会在单独登录设备时跟踪上次使用的用户名/密码。可通过选项窗口设置的默认值首先使用并保持不变,除非通过选项窗口更改,尽管临时设置已更改并在默认值中使用。

无论如何,情况就是这样......关于这个问题,我正在这样做:

private static class TemporarySettings
{
    public static string Username = Properties.Settings.Default["Username"].ToString();
    public static string Password = Properties.Settings.Default["Password"].ToString();
}

这是愚蠢的吗?

最佳答案

它并不愚蠢,它可能会完美地解决您的问题(如果是,请不要更改它)。不过,这种方法可能会在未来导致一些问题,了解这些问题是有帮助的。

  1. 如果您想在不重新启动应用程序的情况下更改用户名和密码,则没有该选项。您可以编写逻辑来观察配置文件的变化,并在值发生变化时重新加载它们。
  2. 如果您想为多组用户名和密码“重用”您的代码(尤其是如果您放置更多行为,例如监视更改),则需要将其转换为一个实例。
  3. 如果您想对依赖于此类的类进行单元测试,您将很难对这些值进行 stub 。

不过,重申一下,您不应该因为这些潜在问题而回避最简单的解决方案(如您定义的那样),除非您认为有现实的机会您会被他们在未来。否则,稍后在需要时切换到实例类可能不是一个非常困难的重构。

关于c# - 静态类...这样做可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/928055/

相关文章:

java - 从私有(private)内部类访问外部类私有(private)变量是一种不好的做法吗?

generics - typescript 调用泛型类型的静态方法

c# - TDD/注入(inject)和信息隐藏之间的斗争 - 可能的妥协?

c# - 通过 Interop 调用返回结构实例的方法

c# - 在 C# 中使用内存映射文件时是否可以避免数据副本?

design-patterns - 在业务逻辑层中使用静态类

java - 命令行参数 Java

c# - 为什么将长度为 0 的 byte[] 注入(inject)到我的类中?

c# - AcceptTcpClient() 和基于 TcpClient 的类

php - 一个类可以在php中是静态的吗