C#의 차별적 공용체: 유형 안전성 강화
제공된 코드 조각은 C#에서 다음과 유사한 차별적 공용체를 생성하려는 시도를 보여줍니다. C의 공용체 개념입니다. 이 접근 방식은 유형 안전성과 유사한 형태를 제공하지만 컴파일러에서 시행하는 유형 검사가 부족합니다. Is() 및 As() 함수.
유형 안전성 향상
이 문제를 해결하기 위해 개선된 솔루션에서는 보다 엄격한 유형 안전 결합 구조를 사용합니다. 이 공용체는 C#의 패턴 일치 메커니즘을 활용하여 잘못된 데이터 유형 사용 시 컴파일 오류를 발생시킵니다.
public abstract class Union3<A, B, C> { public abstract T Match<T>(Func<A, T> f, Func<B, T> g, Func<C, T> h); private Union3() { } } public sealed class Case1<A, B, C> : Union3<A, B, C> { public readonly A Item; public Case1(A item) : base() { this.Item = item; } public override T Match<T>(Func<A, T> f, Func<B, T> g, Func<C, T> h) { return f(Item); } } public sealed class Case2<A, B, C> : Union3<A, B, C> { public readonly B Item; public Case2(B item) : base() { this.Item = item; } public override T Match<T>(Func<A, T> f, Func<B, T> g, Func<C, T> h) { return g(Item); } } public sealed class Case3<A, B, C> : Union3<A, B, C> { public readonly C Item; public Case3(C item) : base() { this.Item = item; } public override T Match<T>(Func<A, T> f, Func<B, T> g, Func<C, T> h) { return h(Item); } }
사용
이 향상된 공용체를 사용하면 패턴 일치를 통해 유형 안전성이 적용됩니다. . 예를 들어, 다음 코드에서 잘못된 데이터 유형을 사용하려고 하면 컴파일 오류가 발생합니다.
public void DoSomething() { if (ValueA.Match(a => true, b => false, c => false)) { var s = ValueA.Match(a => a.ToString(), b => null, c => null); // Safely use string type 's' } }
패턴 일치를 통해 구별된 공용체를 구현함으로써 유형 안전성을 높이고 잠재적인 런타임을 제거합니다. 잘못된 데이터 유형 처리와 관련된 오류.
위 내용은 패턴 일치는 C# 식별 공용체에서 형식 안전성을 어떻게 향상시킬 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!