繁体   English   中英

C# 类中的只读引用变量

[英]ReadOnly Reference variables in a C# Class

我有一个实例类,它实现了一个接口,并且除了接口方法之外的所有方法都是静态的。 所有的类变量也是静态的。 其中两个静态变量实际上是实例变量并标记为只读。 这些只读实例变量是内联初始化的。

这是一个例子

public class Test : ITestInterface
{

  public static readonly DbConnection Connection = new DbConnection();

  public void static TestMethod1(){
  }

  public List<string> static TestMethod2(){
  }

}

我的框架层中有很多使用静态连接变量的方法。

这是一个有效的设计吗? 我想为所有 API 调用使用相同的对象。 这个想法是为了避免创建多个连接对象。 在任何一天,有来自客户端的调用负载,都有可能创建 10,000 个连接对象。 我试图避免这种情况。

这个想法是为了避免创建多个连接对象

用于处理这种情况的模式是单例模式。 也不是您必须这种方式实施。 但这是一般准则。

在您的具体示例中,您可以做的是渲染类private构造函数。

public class Test : ITestInterface
{
  ...
  private Test() {}
  ..
}

这将使创建类的实例成为不可能,因此也无法从它派生。 因此,您的Test类的使用者将别无选择,只能访问它的static成员。

但总的来说,我强烈建议您查看上面链接的模式。 它可能会照耀你在做什么,有一些启发,要如何做到这一点。

很少有事情,首先您基本上将连接用作单例。 可以是一个完美的设计模式,但有很多考虑因素,让我担心你像你发布的那样使用它。

  1. 你有多个线程访问这个吗? 连接线程安全吗? 所有的变量都是线程安全的吗? 如果不是,您正在寻找麻烦。

  2. 您真的想在应用程序的整个生命周期中保持一个连接打开吗? 如果连接关闭会发生什么? 单身人士通常是处理这类问题的经理,而不是单一资源。

  3. 您知道多个连接会低效吗? 大多数连接层(如 SQL)管理一个连接池,可以非常有效地管理连接,并且无需您担心。 这通常是一种更好的模式,除非您可以使用性能计数器证明您可以更有效地自己管理连接

我会谨慎地使用单例,并且仅在资源真正全局且不变以及线程安全的情况下。 如果它是全局的,但需要围绕它进行管理和线程安全(想想连接),那么你最好添加一个自定义管理器类。 但同样,只有在您能证明您可以手动处理比使用普通连接池更多的连接和吞吐量时才这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM