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() { }
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.