Bagikan melalui


Pengubah berkas

Dimulai dengan C# 11, kata kunci kontekstual file adalah pengubah jenis.

Pengubah file membatasi visibilitas jenis tingkat atas ke file tempat jenis tersebut dideklarasikan. Pengubah file paling sering diterapkan pada jenis yang ditulis oleh generator sumber. Jenis file lokal menyediakan generator sumber dengan cara yang mudah untuk menghindari tabrakan nama di antara jenis yang dihasilkan. Pengubah file mendeklarasikan jenis file lokal, seperti dalam contoh ini:

file class HiddenWidget
{
    // implementation
}

Jenis apa pun yang tertanam dalam jenis lokal berkas juga hanya terlihat dalam berkas di mana jenis tersebut dideklarasikan. Jenis lain dalam rakitan dapat menggunakan nama yang sama dengan jenis file lokal. Karena tipe lokal dalam file hanya terlihat dalam file tempat ia dideklarasikan, jenis ini tidak menyebabkan tabrakan penamaan.

Jenis tipe file-lokal tidak boleh menjadi tipe pengembalian atau tipe parameter dari anggota apa pun yang dideklarasikan dalam tipe non file-lokal. Jenis lokal terhadap berkas tidak dapat menjadi anggota variabel dari yang tidak lokal terhadap berkas. Namun, jenis yang lebih terlihat dapat secara implisit mengimplementasikan jenis antarmuka lokal file. Jenis ini juga dapat secara eksplisit mengimplementasikan antarmuka lokal file tetapi implementasi eksplisit hanya dapat digunakan dalam file yang sama.

Contoh berikut menunjukkan tipe publik yang menggunakan tipe lokal-file untuk menyediakan metode pekerja. Selain itu, jenis publik mengimplementasikan antarmuka file lokal secara implisit:

// In File1.cs:
file interface IWidget
{
    int ProvideAnswer();
}

file class HiddenWidget
{
    public int Work() => 42;
}

public class Widget : IWidget
{
    public int ProvideAnswer()
    {
        var worker = new HiddenWidget();
        return worker.Work();
    }
}

Dalam file sumber lain, Anda dapat mendeklarasikan jenis yang memiliki nama yang sama dengan jenis file lokal. Jenis file lokal tidak terlihat:

// In File2.cs:
// Doesn't conflict with HiddenWidget
// declared in File1.cs
public class HiddenWidget
{
    public void RunTask()
    {
        // omitted
    }
}

Pencarian anggota lebih mengutamakan tipe yang bersifat lokal terhadap file dan dinyatakan dalam file yang sama, dibandingkan dengan tipe yang bersifat non-lokal terhadap file dan dinyatakan dalam file yang berbeda. Aturan ini memastikan bahwa generator kode sumber dapat mengandalkan pencarian anggota untuk menyelesaikan tipe yang khusus untuk file tanpa ambiguitas dengan deklarasi tipe lainnya. Dalam contoh sebelumnya, semua penggunaan HiddenWidget dalam File1.cs merujuk ke tipe lokal file yang dideklarasikan dalam File1.cs. Deklarasi lokal-file HiddenWidget menyembunyikan deklarasi publik di File2.cs.

Spesifikasi bahasa C#

Untuk informasi selengkapnya, lihat aksesibilitas Dinyatakan dalamSpesifikasi Bahasa C# , dan C# 11 - Jenis lokal file spesifikasi fitur.

Lihat juga