Bagikan melalui


pengubah baru (Referensi C#)

Saat Anda menggunakan new kata kunci sebagai pengubah deklarasi, Anda secara eksplisit menyembunyikan anggota yang disediakan kelas dasar. Saat Anda menyembunyikan anggota yang diwariskan, versi turunan anggota menggantikan versi kelas dasar. Anda dapat menyembunyikan anggota saat versi kelas dasar terlihat di kelas turunan. Versi kelas dasar tidak terlihat jika ditandai sebagai private atau, dalam beberapa kasus, internal. Meskipun Anda dapat menyembunyikan public atau protected anggota tanpa menggunakan pengubah new , Anda mendapatkan peringatan kompilator. Jika Anda menggunakan new untuk menyembunyikan anggota secara eksplisit, itu menekan peringatan ini.

Referensi bahasa C# mendokumentasikan versi bahasa C# yang paling baru dirilis. Ini juga berisi dokumentasi awal untuk fitur dalam pratinjau publik untuk rilis bahasa yang akan datang.

Dokumentasi mengidentifikasi fitur apa pun yang pertama kali diperkenalkan dalam tiga versi terakhir bahasa atau dalam pratinjau publik saat ini.

Petunjuk / Saran

Untuk menemukan kapan fitur pertama kali diperkenalkan di C#, lihat artikel tentang riwayat versi bahasa C#.

Anda juga dapat menggunakan new kata kunci untuk membuat instans jenis atau sebagai batasan jenis generik.

Untuk menyembunyikan anggota yang diwariskan, nyatakan di kelas turunan dengan menggunakan nama anggota yang sama, dan ubah dengan new kata kunci. Contohnya:

public class BaseC
{
    public int x;
    public void Invoke() { }
}
public class DerivedC : BaseC
{
    new public void Invoke() { }
}

Dalam contoh ini, BaseC.Invoke disembunyikan oleh DerivedC.Invoke. Bidang x tidak terpengaruh karena tidak disembunyikan oleh nama yang sama.

Nama yang bersembunyi melalui pewarisan mengambil salah satu formulir berikut:

  • Umumnya, konstanta, bidang, properti, atau jenis yang Anda perkenalkan di kelas atau struktur menyembunyikan semua anggota kelas dasar yang berbagi namanya. Namun, ada beberapa kasus khusus. Misalnya, jika Anda mendeklarasikan bidang baru dengan nama N untuk memiliki jenis yang tidak dapat dipanggil, dan jenis dasar menyatakan N sebagai metode, bidang baru tidak menyembunyikan deklarasi dasar dalam sintaks pemanggilan. Untuk informasi selengkapnya, lihat bagian Pencarian anggota dari spesifikasi bahasa C#.

  • Metode yang Anda perkenalkan di kelas atau struktur menyembunyikan properti, bidang, dan jenis yang berbagi nama tersebut di kelas dasar. Ini juga menyembunyikan semua metode kelas dasar yang memiliki tanda tangan yang sama.

  • Pengindeks yang Anda perkenalkan di kelas atau struktur menyembunyikan semua pengindeks kelas dasar yang memiliki tanda tangan yang sama.

Ini adalah kesalahan untuk menggunakan dan newmengambil alih pada anggota yang sama, karena kedua pengubah memiliki arti yang saling eksklusif. Pengubah new membuat anggota baru dengan nama yang sama dan menyebabkan anggota asli menjadi tersembunyi. Pengubah override memperluas implementasi untuk anggota yang diwariskan.

Menggunakan pengubah new dalam deklarasi yang tidak menyembunyikan anggota yang diwariskan menghasilkan peringatan.

Contoh

Dalam contoh ini, kelas dasar, BaseC, dan kelas turunan, DerivedC, gunakan nama xbidang yang sama , yang menyembunyikan nilai bidang yang diwariskan. Contoh menunjukkan penggunaan pengubah new . Ini juga menunjukkan cara mengakses anggota tersembunyi dari kelas dasar dengan menggunakan nama mereka yang sepenuhnya memenuhi syarat.

public class BaseC
{
    public static int x = 55;
    public static int y = 22;
}

public class DerivedC : BaseC
{
    // Hide field 'x'.
    new public static int x = 100;

    static void Main()
    {
        // Display the new value of x:
        Console.WriteLine(x);

        // Display the hidden value of x:
        Console.WriteLine(BaseC.x);

        // Display the unhidden member y:
        Console.WriteLine(y);
    }
}
/*
Output:
100
55
22
*/

Dalam contoh ini, kelas berlapis menyembunyikan kelas yang memiliki nama yang sama di kelas dasar. Contoh menunjukkan cara menggunakan new pengubah untuk menghilangkan pesan peringatan dan cara mengakses anggota kelas tersembunyi dengan menggunakan nama mereka yang sepenuhnya memenuhi syarat.

public class BaseC
{
    public class NestedC
    {
        public int x = 200;
        public int y;
    }
}

public class DerivedC : BaseC
{
    // Nested type hiding the base type members.
    new public class NestedC
    {
        public int x = 100;
        public int y;
        public int z;
    }

    static void Main()
    {
        // Creating an object from the overlapping class:
        NestedC c1  = new NestedC();

        // Creating an object from the hidden class:
        BaseC.NestedC c2 = new BaseC.NestedC();

        Console.WriteLine(c1.x);
        Console.WriteLine(c2.x);
    }
}
/*
Output:
100
200
*/

Jika Anda menghapus pengubah new , program masih mengkompilasi dan menjalankan, tetapi Anda mendapatkan peringatan berikut:

The keyword new is required on 'MyDerivedC.x' because it hides inherited member 'MyBaseC.x'.

Spesifikasi bahasa C#

Untuk informasi selengkapnya, lihat Bagian pengubah baru dari spesifikasi bahasa C#.

Lihat juga