C\#단일 클래스 의 실현 방법

3796 단어 C#일례 류
단일 클래스 는 하나의 클래스 전체 에 하나의 인 스 턴 스 만 있 고 전체 방문 점 을 제공 합 니 다.하나의 인 스 턴 스 만 생 성 할 수 있 기 때문에 우 리 는 구조 함 수 를 개인 함수 로 설정 하여 다른 사람 이 인 스 턴 스 를 만 드 는 것 을 금지 해 야 합 니 다.
실현 1:게으름뱅이 식,스 레 드 안전 하지 않 음
이 실현 은 추가 비용 이 없고 스 레 드 안전 을 요구 하지 않 는 상황 에서 사용 할 수 있 습 니 다.

public class Singleton1
{
  private static Singleton1 instance = null;
  private Singleton1() { }

  public static Singleton1 Instance
  {
    get
    {
      if (instance == null)
      {
        instance = new Singleton1();
      }
      return instance;
    }
  }
}

실현 2:게으름뱅이 식,스 레 드 안전
매번 방문 사례 의 인 스 턴 스 에 자 물 쇠 를 추가 하기 때문에 자 물 쇠 를 추가 하 는 것 은 시간 이 많이 걸 리 는 작업 이기 때문에 사용 하 는 것 을 추천 하지 않 습 니 다.

public class Singleton2
{
  private readonly static object lockObj = new object();
  private static Singleton2 instance = null;
  private Singleton2() { }

  public static Singleton2 Instance
  {
    get
    {
      lock(lockObj)
      {
        if (instance == null)
        {
          instance = new Singleton2();
        }
      }
      return instance;
    }
  }
}

실현 3:굶 주 린 한식,라인 안전
쓰기 가 간단 하고 스 레 드 가 안전 하지만 구조 시 기 는 프로그래머 가 통제 하 는 것 이 아니다.

public class Singleton3
{
  private static Singleton3 instance = new Singleton3();
  private Singleton3() { }
  public static Singleton3 Instance { get { return instance; } }

  public static void Test()
  {
    Console.WriteLine("test");
  }
}

.NET 이 실 행 될 때 Singleton 3 를 처음 사용 할 때 단일 인 스 턴 스 를 만 듭 니 다.Singleton 3.Instance 속성 을 처음 호출 할 때 만 드 는 것 이 아 닙 니 다.다음 작업 을 수행 하 십시오.

Singleton3.Test();
실현 4:게으름뱅이 식,이중 검사 자물쇠
2 를 실현 하 는 토대 에서 개선 하고 첫 번 째 인 스 턴 스 를 만 들 때 만 자 물 쇠 를 추가 하여 접근 성능 을 향상 시 킵 니 다.

public class Singleton4
{
  private readonly static object lockObj = new object();
  private static Singleton4 instance = null;
  private Singleton4() { }

  public static Singleton4 Instance
  {
    get
    {
      if (instance == null)
      {
        lock (lockObj)
        {
          if (instance == null)
          {
            instance = new Singleton4();
          }
        }
      }
      return instance;
    }
  }
}

실현 5:게으름뱅이 식,내부 류
방법 3 을 바탕 으로 개선 하여 Singleton 5.Instance 속성 에 접근 할 때 만 인 스 턴 스 를 구성 할 수 있 도록 합 니 다.

public class Singleton5
{
  class Nested 
  {
    internal static readonly Singleton5 instance = new Singleton5();
  }
  private Singleton5() { }
  public static Singleton5 Instance { get { return Nested.instance; } }
}
단일 기본 클래스 구현
단일 기본 클래스 를 통 해 우 리 는 간단하게 계승 을 통 해 하나의 단일 클래스 를 만 들 고 코드 재 활용 을 실현 할 수 있 습 니 다.

//            ,       
public abstract class Singleton<T> where T : class
{
  //       5   ,             
  class Nested
  {
    //        ,  2  true          
    internal static readonly T instance = Activator.CreateInstance(typeof(T), true) as T;
  }
  private static T instance = null;
  public static T Instance { get { return Nested.instance; } }
}
사용 방법 은 다음 과 같다.

class TestSingleton : Singleton<TestSingleton>
{
  //         ,      new  
  private TestSingleton() { }
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기