Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Memanggil Kaedah Kelas Asas Secara Terus, Melangkau Penggantian Perantaraan?

Bagaimana untuk Memanggil Kaedah Kelas Asas Secara Terus, Melangkau Penggantian Perantaraan?

Patricia Arquette
Lepaskan: 2025-01-01 12:14:10
asal
983 orang telah melayarinya

How to Call a Base Class Method Directly, Bypassing Intermediate Overrides?

Memanggil Kaedah Base Secara Terus

Dalam OOP, mengakses kaedah kelas asas dalam kelas terbitan adalah penting untuk mengatasi kaedah. Walau bagaimanapun, persoalan timbul: "Bagaimanakah kita boleh memanggil kaedah asas asas, memintas sebarang penggantian perantaraan?"

Untuk mengelakkan panggilan yang tidak diingini kepada Derived.Say() dalam kelas SpecialDerived, kod sumber asal tidak boleh diubahsuai. Walau bagaimanapun, penyelesaian wujud. Dengan memperkenalkan kaedah baharu, CustomSay(), dalam kelas Derived dan mengatasinya dalam SpecialDerived, kami boleh mengubah hala tingkah laku lalai sambil mengekalkan kaedah Say() yang sedia ada.

Berikut ialah kod yang diubah suai:

// Cannot change source code
class Derived : Base
{
    public override void Say()
    {
        CustomSay();

        base.Say();
    }

    protected virtual void CustomSay()
    {
        Console.WriteLine("Called from Derived.");
    }
}

class SpecialDerived : Derived
{
    protected override void CustomSay()
    {
        Console.WriteLine("Called from Special Derived.");
    }
}
Salin selepas log masuk

Sekarang, apabila memanggil sd.Say(), hasilnya akan be:

Called from Special Derived.
Called from Base.
Salin selepas log masuk

Penggunaan kaedah baharu CustomSay() membenarkan penyesuaian tanpa mengubah suai kaedah Say() yang ditindih. Walau bagaimanapun, pada umumnya tidak digalakkan untuk mengakses kaedah asas melebihi tahap pertama kerana potensinya untuk masalah kekeliruan dan penyelenggaraan.

Atas ialah kandungan terperinci Bagaimana untuk Memanggil Kaedah Kelas Asas Secara Terus, Melangkau Penggantian Perantaraan?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan