Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Pemadanan Corak Boleh Meningkatkan Keselamatan Jenis dalam Kesatuan Terdiskriminasi C#?

Bagaimanakah Pemadanan Corak Boleh Meningkatkan Keselamatan Jenis dalam Kesatuan Terdiskriminasi C#?

DDD
Lepaskan: 2025-01-02 20:15:38
asal
747 orang telah melayarinya

How Can Pattern Matching Enhance Type Safety in C# Discriminated Unions?

Kesatuan Terdiskriminasi dalam C#: Menguatkuasakan Keselamatan Jenis

Coretan kod yang disediakan mempamerkan percubaan untuk mencipta kesatuan terdiskriminasi dalam C#, sama dengan konsep kesatuan dalam C. Walaupun pendekatan ini memberikan beberapa kemiripan jenis keselamatan, ia tidak mempunyai pemeriksaan jenis yang dikuatkuasakan pengkompil dalam fungsi Is() dan As().

Peningkatan untuk Keselamatan Jenis

Untuk menangani isu ini, penyelesaian yang dipertingkatkan menggunakan struktur kesatuan jenis selamat yang lebih ketat . Kesatuan ini menggunakan mekanisme pemadanan corak C# untuk membuang ralat kompilasi apabila penggunaan jenis data yang salah:

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);
    }
}
Salin selepas log masuk

Penggunaan

Menggunakan kesatuan yang dipertingkat ini, keselamatan jenis dikuatkuasakan melalui pemadanan corak . Sebagai contoh, cubaan menggunakan jenis data yang salah dalam kod berikut akan mengakibatkan ralat penyusunan:

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'
    }
}
Salin selepas log masuk

Dengan melaksanakan kesatuan yang didiskriminasi dengan padanan corak, kami mencapai tahap keselamatan jenis yang lebih tinggi dan menghapuskan potensi masa jalan ralat yang dikaitkan dengan pengendalian jenis data yang salah.

Atas ialah kandungan terperinci Bagaimanakah Pemadanan Corak Boleh Meningkatkan Keselamatan Jenis dalam Kesatuan Terdiskriminasi C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan