Aturan dan konvensi penamaan pengidentifikasi C#

Pengidentifikasi adalah nama yang Anda tetapkan ke jenis (kelas, antarmuka, struktur, delegasi, atau enum), anggota, variabel, atau namespace.

Aturan penamaan

Pengidentifikasi yang valid harus mengikuti aturan ini. Pengkompilasi C# menghasilkan kesalahan untuk pengidentifikasi apa pun yang tidak mengikuti aturan ini:

  • Pengidentifikasi harus diawali dengan huruf atau garis bawah (_).
  • Pengidentifikasi dapat berisi karakter huruf Unicode, karakter digit desimal, karakter penghubung Unicode, karakter gabungan Unicode, atau karakter pemformatan Unicode. Untuk informasi selengkapnya tentang kategori Unicode, lihat Database Kategori Unicode.

Anda dapat mendeklarasikan pengidentifikasi yang cocok dengan kata kunci C# menggunakan prefiks @ pada pengidentifikasi. @ Bukan bagian dari nama pengidentifikasi. Misalnya, @if mendeklarasikan pengidentifikasi bernama if. Pengidentifikasi verbatim ini utamanya adalah untuk interoperabilitas dengan pengidentifikasi yang dideklarasikan dalam bahasa lainnya.

Untuk definisi lengkap pengidentifikasi yang valid, lihat artikel Pengidentifikasi di Spesifikasi Bahasa C#.

Penting

Spesifikasi bahasa C# hanya memungkinkan huruf (Lu, Ll, Lt, Lm, Lo atau Nl), digit (Nd), menghubungkan (Pc), menggabungkan (Mn atau Mc), dan kategori pemformatan (Cf). Apa pun di luar yang secara otomatis diganti menggunakan _. Ini mungkin berdampak pada karakter Unicode tertentu.

Konvensi penamaan

Selain aturan, konvensi untuk nama pengidentifikasi digunakan di seluruh API .NET. Konvensi ini memberikan konsistensi untuk nama, tetapi pengkompilasi tidak memberlakukannya. Anda bebas menggunakan konvensi yang berbeda dalam proyek Anda.

Menurut konvensi, program C# menggunakan PascalCase untuk nama jenis, namespace layanan, dan semua anggota publik. Selain itu, dotnet/docs tim menggunakan konvensi berikut, yang diadopsi dari gaya pengodatan tim .NET Runtime:

  • Nama antarmuka dimulai dengan huruf kapital I.

  • Jenis atribut diakhiri dengan kata Attribute.

  • Jenis enum menggunakan kata benda tunggal untuk nonflags, dan kata benda jamak untuk bendera.

  • Pengidentifikasi tidak boleh berisi dua karakter garis bawah (_) berturut-turut. Nama-nama tersebut disimpan untuk pengidentifikasi yang dihasilkan pengompilasi.

  • Gunakan nama yang bermakna dan deskriptif untuk variabel, metode, dan kelas.

  • Lebih suka kejelasan daripada kejelasan.

  • Gunakan PascalCase untuk nama kelas dan nama metode.

  • Gunakan camelCase untuk parameter metode dan variabel lokal.

  • Gunakan PascalCase untuk nama konstanta, baik bidang maupun konstanta lokal.

  • Bidang instans privat dimulai dengan garis bawah (_) dan teks yang tersisa adalah camelCased.

  • Bidang statis dimulai dengan s_. Konvensi ini bukan perilaku Visual Studio default, atau bagian dari pedoman desain Framework, tetapi dapat dikonfigurasi dalam konfigurasi editor.

  • Hindari menggunakan singkatan atau akronim dalam nama, kecuali untuk singkatan yang dikenal dan diterima secara luas.

  • Gunakan namespace yang bermakna dan deskriptif yang mengikuti notasi nama domain terbalik.

  • Pilih nama rakitan yang mewakili tujuan utama perakitan.

  • Hindari menggunakan nama huruf tunggal, kecuali untuk penghitung perulangan sederhana. Selain itu, contoh sintaks yang menggambarkan sintaks konstruksi C# sering menggunakan nama huruf tunggal berikut yang cocok dengan konvensi yang digunakan dalam spesifikasi bahasa C#. Contoh sintaks adalah pengecualian untuk aturan.

    • Gunakan S untuk struktur, C untuk kelas.
    • Gunakan M untuk metode.
    • Gunakan v untuk variabel, p untuk parameter.
    • Gunakan r untuk ref parameter.

Tip

Anda dapat menerapkan konvensi penamaan yang menyangkut kapitalisasi, awalan, akhiran, dan pemisah kata dengan menggunakan aturan penamaan gaya kode.

Dalam contoh berikut, panduan yang berkaitan dengan elemen yang ditandai public juga berlaku saat bekerja dengan protected elemen dan protected internal , yang semuanya dimaksudkan untuk terlihat oleh pemanggil eksternal.

Pascal case

Gunakan casing pascal ("PascalCasing") saat memberi classnama , , interfacestruct, atau delegate jenis.

public class DataService
{
}
public record PhysicalAddress(
    string Street,
    string City,
    string StateOrProvince,
    string ZipCode);
public struct ValueCoordinate
{
}
public delegate void DelegateType(string message);

Saat menamai interface, gunakan pascal casing selain mengawali nama dengan I. Awalan ini dengan jelas menunjukkan kepada konsumen bahwa itu adalah interface.

public interface IWorkerQueue
{
}

Saat memberi nama public anggota jenis, seperti bidang, properti, peristiwa, gunakan casing pascal. Selain itu, gunakan casing pascal untuk semua metode dan fungsi lokal.

public class ExampleEvents
{
    // A public field, these should be used sparingly
    public bool IsValid;

    // An init-only property
    public IWorkerQueue WorkerQueue { get; init; }

    // An event
    public event Action EventProcessing;

    // Method
    public void StartEventProcessing()
    {
        // Local function
        static int CountQueueItems() => WorkerQueue.Count;
        // ...
    }
}

Saat menulis rekaman posisi, gunakan pascal casing untuk parameter karena merupakan properti publik dari rekaman.

public record PhysicalAddress(
    string Street,
    string City,
    string StateOrProvince,
    string ZipCode);

Untuk informasi selengkapnya tentang rekaman posisi, lihat Sintaks posisi untuk definisi properti.

Camel case

Gunakan casing unta ("camelCasing") saat menamai private atau internal bidang dan awali dengan _. Gunakan casing unta saat memberi nama variabel lokal, termasuk instans jenis delegasi.

public class DataService
{
    private IWorkerQueue _workerQueue;
}

Tip

Saat mengedit kode C# yang mengikuti berbagai konvensi penamaan ini dalam IDE yang mendukung penyelesaian pernyataan, mengetik _ akan menampilkan semua anggota cakupan objek.

Saat bekerja dengan bidang static yang merupakan private atau internal, gunakan awalan s_ dan untuk utas statis gunakan t_.

public class DataService
{
    private static IWorkerQueue s_workerQueue;

    [ThreadStatic]
    private static TimeSpan t_timeSpan;
}

Saat menulis parameter metode, gunakan camel casing.

public T SomeMethod<T>(int someNumber, bool isValid)
{
}

Untuk informasi selengkapnya tentang konvensi penamaan C#, lihat gaya pengodatan tim .NET Runtime.

Pedoman penamaan parameter jenis

Panduan berikut berlaku untuk mengetik parameter pada parameter jenis generik. Parameter jenis adalah tempat penampung untuk argumen dalam jenis generik atau metode generik. Anda dapat membaca selengkapnya tentang parameter jenis generik dalam panduan pemrograman C#.

  • Beri nama parameter jenis generik dengan nama deskriptif, kecuali nama huruf tunggal benar-benar jelas dan nama deskriptif tidak akan menambahkan nilai.

    public interface ISessionChannel<TSession> { /*...*/ }
    public delegate TOutput Converter<TInput, TOutput>(TInput from);
    public class List<T> { /*...*/ }
    
  • Pertimbangkan untuk menggunakan T sebagai nama parameter jenis untuk jenis dengan satu parameter jenis huruf tunggal.

    public int IComparer<T>() { return 0; }
    public delegate bool Predicate<T>(T item);
    public struct Nullable<T> where T : struct { /*...*/ }
    
  • Beri prefiks nama parameter jenis deskriptif dengan "T".

    public interface ISessionChannel<TSession>
    {
        TSession Session { get; }
    }
    
  • Pertimbangkan untuk menunjukkan batasan yang ditempatkan pada parameter jenis dalam nama parameter. Misalnya, parameter yang dibatasi untuk ISession dapat disebut TSession.

Aturan analisis kode CA1715 dapat digunakan untuk memastikan bahwa parameter jenis diberi nama dengan tepat.

Konvensi penamaan ekstra

  • Contoh yang tidak termasuk penggunaan direktif, gunakan kualifikasi namespace layanan. Jika Anda tahu bahwa namespace layanan diimpor secara default dalam proyek, Anda tidak perlu sepenuhnya memenuhi syarat nama dari namespace layanan tersebut. Nama yang memenuhi syarat dapat dipecah setelah titik (.) jika terlalu panjang untuk satu baris, seperti yang ditunjukkan dalam contoh berikut.

    var currentPerformanceCounterCategory = new System.Diagnostics.
        PerformanceCounterCategory();
    
  • Anda tidak perlu mengubah nama objek yang dibuat dengan menggunakan alat perancang Visual Studio agar sesuai dengan panduan lain.