Singleton的无状态实例方法线程安全(C#)

时间:2010-01-30 15:48:15

标签: c# singleton multithreading methods

使转换器成为单例是否安全?

public interface IConverter<TFoo, TBar>
    where TFoo : class, new()
    where TBar : class, new()
{
    TFoo ToFoo(TBar q);
    TBar ToBar(TFoo q);
}

public class Converter : IConverter<Foo, Bar>
{
    public Foo ToFoo(Bar b) {return new Foo(b);}
    public Bar ToBar(Foo f) {return new Bar(f);}
}

3 个答案:

答案 0 :(得分:2)

是的,这绝对没问题。没有状态,因此没有线程安全问题 - 并且没有原因有多个实例。这是一个相当自然的单身人士。

当然,为了灵活性和可测试性,尽可能使用接口是很好的 - 但是当您知道要使用该特定实现时,单例实例就可以了。

答案 1 :(得分:2)

是的,实施不依赖于州。

答案 2 :(得分:1)

是的,因为该类没有数据成员,您可以将其设为单例。

由于该类太小,您只需创建一个静态实例:

public class Converter : IConverter<Foo, Bar> {

  private static _instance = new Converter();

  public static Instance { get { return _instance; } }

  public Foo ToFoo(Bar b) {return new Foo(b);}
  public Bar ToBar(Foo f) {return new Bar(f);}

}