Apa { get; set; } sintaks di C#?

Saya belajar ASP.NET MVC dan aku dapat membaca dokumen bahasa inggris, tapi aku don't benar-benar memahami apa yang terjadi di dalam kode ini:

public class Genre
{
    public string Name { get; set; }
}

Apa artinya ini: { get; set; }?

Mengomentari pertanyaan (5)
Larutan

It's yang disebut auto properti, dan pada dasarnya adalah sebuah singkatan sebagai berikut (kode yang sama akan dihasilkan oleh compiler):

private string name;
public string Name
{
    get
    {
        return this.name;
    }
    set
    {
        this.name = value;
    }
}
Komentar (11)

Jadi seperti yang saya mengerti { get; set; } adalah "auto properti" yang sama seperti @Klaus dan @Brandon mengatakan adalah singkatan untuk menulis sebuah properti dengan "dukungan lapangan." Jadi dalam hal ini:

public class Genre
{
    private string name; // This is the backing field
    public string Name   // This is your property
    {
        get => name;
        set => name = value;
    }
}

Namun jika anda're seperti saya - sekitar satu jam yang lalu - anda don't benar-benar memahami apa sifat dan accesor, dan anda don't memiliki pemahaman terbaik dari beberapa terminologi dasar yang baik. MSDN adalah alat yang hebat untuk belajar hal-hal seperti ini, tapi itu's tidak selalu mudah untuk dipahami bagi pemula. Jadi saya'm akan mencoba untuk menjelaskan hal ini lebih mendalam di sini.

mendapatkan dan mengatur adalah accesor, yang berarti mereka're dapat mengakses data dan informasi * swasta kolom (biasanya dari dukungan lapangan) dan biasanya melakukannya dari umum* sifat*** (seperti yang anda lihat dalam contoh di atas).

Ada's tidak ada menyangkal bahwa pernyataan di atas adalah cukup membingungkan, jadi let's pergi ke beberapa contoh. Let's mengatakan kode ini mengacu pada genre musik. Jadi di dalam kelas Genre, we're akan ingin genre musik yang berbeda. Let's mengatakan kami ingin memiliki 3 genre: Hip-Hop, Rock, dan Country. Untuk melakukan hal ini kita akan menggunakan nama Kelas buat contoh dari kelas itu.

Genre g1 = new Genre(); //Here we're creating a new instance of the class "Genre"
                        //called g1. We'll create as many as we need (3)
Genre g2 = new Genre();
Genre g3 = new Genre();

//Note the () following new Genre. I believe that's essential since we're creating a
//new instance of a class (Like I said, I'm a beginner so I can't tell you exactly why
//it's there but I do know it's essential)

Sekarang kita've dibuat contoh dari Genre kelas, kita dapat mengatur genre nama menggunakan 'Nama' properti yang mengatur cara di atas.

public string Name //Again, this is the 'Name' property
{ get; set; } //And this is the shorthand version the process we're doing right now 

Kita dapat mengatur nama 'g1' untuk Hip Hop dengan menulis sebagai berikut

g1.Name = "Hip Hop";

Apa's terjadi di sini adalah semacam kompleks. Seperti yang saya katakan sebelumnya, mendapatkan dan mengatur akses informasi dari swasta bidang yang anda dinyatakan tidak't dapat mengakses. mendapatkan hanya dapat baca informasi dari bidang pribadi dan mengembalikannya. mengatur hanya dapat menulis informasi dalam bidang pribadi. Tapi dengan memiliki properti dengan mendapatkan dan set kita're dapat melakukan kedua fungsi tersebut. Dan dengan menulis g1.Nama = "Hip Hop"; kami khusus menggunakan set fungsi dari Nama properti

set menggunakan implisit variabel yang disebut dengan nilai. Pada dasarnya apa artinya ini adalah setiap kali anda melihat "nilai" dalam set, it's mengacu pada variabel; "nilai" variabel. Ketika kita menulis g1.Nama = kita're menggunakan = untuk lulus dalam nilai variabel yang dalam hal ini adalah "Hip Hop". Jadi pada dasarnya anda dapat berpikir seperti ini:

public class g1 //We've created an instance of the Genre Class called "g1"
{
    private string name;
    public string Name
    {
        get => name;
        set => name = "Hip Hop"; //instead of 'value', "Hip Hop" is written because 
                              //'value' in 'g1' was set to "Hip Hop" by previously
                              //writing 'g1.Name = "Hip Hop"'
    }
}

It's Penting untuk dicatat bahwa contoh di atas isn't benar-benar tertulis dalam kode. It's lebih dari hipotetis kode yang mewakili apa yang's terjadi di latar belakang.

Jadi sekarang kita've set Nama g1 contoh Genre, saya percaya kita bisa dapatkan **** nama dengan menulis

console.WriteLine (g1.Name); //This uses the 'get' function from our 'Name' Property 
                             //and returns the field 'name' which we just set to
                             //"Hip Hop"

dan jika kita berlari ini kita akan mendapatkan "Hip Hop" di konsol.

Jadi untuk tujuan penjelasan ini saya'll lengkap contoh dengan output serta

using System;
public class Genre
{
    public string Name { get; set; }
}

public class MainClass
{
    public static void Main()
    {
        Genre g1 = new Genre();
        Genre g2 = new Genre();
        Genre g3 = new Genre();

        g1.Name = "Hip Hop";
        g2.Name = "Rock";
        g3.Name = "Country";

        Console.WriteLine ("Genres: {0}, {1}, {2}", g1.Name, g2.Name, g3.Name);
    }
}

Output:

"Genres: Hip Hop, Rock, Country"
Komentar (14)

Mereka adalah otomatis properties

Pada dasarnya cara lain penulisan properti dengan dukungan lapangan.

public class Genre
{
    private string _name;

    public string Name 
    { 
      get => _name;
      set => _name = value;
    }
}
Komentar (4)

Ini adalah cara singkat untuk melakukan hal ini:

public class Genre
{
    private string _name;

    public string Name
    {
      get => _name;
      set => _name = value;
    }
}
Komentar (0)

Itu adalah jalan pintas untuk mengekspos data anggota masyarakat sehingga anda don't perlu secara eksplisit membuat data pribadi anggota. C# akan menciptakan pribadi anggota data untuk anda.

Anda bisa saja membuat data anggota masyarakat tanpa menggunakan shortcut ini, tapi kemudian jika anda memutuskan untuk mengubah implementasi dari data-data anggota untuk memiliki beberapa logika maka anda akan perlu untuk memecahkan antarmuka. Jadi singkatnya ini adalah jalan pintas untuk membuat lebih fleksibel kode.

Komentar (2)

Pada dasarnya, it's shortcut:

class Genre{
    private string genre;
    public string getGenre() {
        return this.genre;
    }
    public void setGenre(string theGenre) {
        this.genre = theGenre;
    }
}
//In Main method
genre g1 = new Genre();
g1.setGenre("Female");
g1.getGenre(); //Female
Komentar (2)
Komentar (2)

Mereka adalah orang asesor untuk properti publik Nama.

Anda akan menggunakan mereka untuk mendapatkan/menentukan nilai dari properti itu dalam sebuah contoh dari Genre.

Komentar (0)

Itu adalah Auto-Properti yang Diterapkan. It's pada dasarnya adalah cara singkat menciptakan sifat untuk kelas di C#, tanpa harus mendefinisikan pribadi variabel untuk mereka. Mereka biasanya digunakan ketika tidak ada tambahan logika diperlukan ketika mendapatkan atau menetapkan nilai dari sebuah variabel.

Anda dapat membaca lebih lanjut di MSDN's Auto-Menerapkan sifat-Sifat Pemrograman Panduan.

Komentar (0)

Ini berarti bahwa jika anda membuat variabel dari tipe Genre, anda akan dapat mengakses variabel sebagai properti

Genre oG = new Genre();
oG.Name = "Test";
Komentar (1)
  • Dapatkan/mengatur pola memberikan struktur yang memungkinkan logika akan ditambahkan selama pengaturan ('set') atau pengambilan ('mendapatkan') properti contoh contoh kelas, yang dapat berguna ketika beberapa instansiasi logika diperlukan untuk properti.

  • Properti dapat memiliki 'mendapatkan' pengakses hanya, yang dilakukan dalam rangka untuk membuat yang properti hanya-baca

  • Ketika menerapkan dapatkan/mengatur pola, variabel perantara yang digunakan sebagai wadah di mana nilai dapat ditempatkan dan nilai diekstrak. Menengah variabel ini biasanya diawali dengan garis bawah. hotel menengah variabel pribadi dalam rangka untuk memastikan bahwa hal itu hanya dapat diakses melalui get/set panggilan. Melihat jawaban dari Brandon, sebagai jawabannya menunjukkan yang paling umum digunakan sintaks konvensi untuk melaksanakan dapatkan/set.

Komentar (0)

Seperti { get; set; } sintaks disebut automatic sifat, C# 3.0 sintaks

Anda harus menggunakan Visual C# 2008 / csc v3.5 atau di atas untuk mengkompilasi. Tapi anda dapat menyusun target output yang rendah .NET Framework 2.0 (tidak runtime atau kelas-kelas yang diperlukan untuk mendukung fitur ini).

Komentar (0)

Di Visual Studio, jika anda mendefinisikan property X di kelas dan anda ingin menggunakan kelas ini hanya sebagai sebuah tipe, setelah bangunan proyek anda, anda akan mendapatkan peringatan yang mengatakan "Bidang X pernah ditugaskan untuk, dan akan selalu memiliki nilai default".

Dengan menambahkan { get; set; } untuk X properti, anda tidak akan mendapatkan peringatan ini.

Selain itu dalam Visual Studio 2013 dan versi atas, dengan menambahkan { get; set; } anda dapat melihat semua referensi untuk properti tersebut.

Komentar (0)

Pada dasarnya sebuah singkatan. Anda dapat menulis public string Nama { get; set; } seperti dalam banyak contoh, tapi anda juga dapat menulis:

private string _name;

public string Name
{
    get { return _name; }
    set { _name = value ; } // value is a special keyword here
}

Mengapa digunakan? Hal ini dapat digunakan untuk menyaring akses ke properti, misalnya anda don't ingin nama untuk memasukkan angka.

Mari saya beri contoh:

private class Person {
    private int _age;  // Person._age = 25; will throw an error
    public int Age{
        get { return _age; }  // example: Console.WriteLine(Person.Age);
        set { 
            if ( value >= 0) {
                _age = value; }  // valid example: Person.Age = 25;
        }
    }
}

Secara resmi yang disebut Auto-Menerapkan sifat-Sifat dan kebiasaan yang baik untuk membaca (panduan pemrograman). Saya juga akan merekomendasikan tutorial video [C# Properties: Mengapa menggunakan "mendapatkan" dan ""][2].

Komentar (0)

Dapatkan set pengubah akses ke properti. Dapatkan membaca dibidang properti. Set nilai properti. Dapatkan adalah seperti akses hanya-Baca. Set lebih suka Menulis-satunya akses. Untuk menggunakan properti seperti membaca menulis baik mendapatkan dan menetapkan harus digunakan.

Komentar (1)

Dapatkan dipanggil ketika properti yang muncul pada sisi kanan (RHS) Set dipanggil ketika properti yang muncul pada sisi kiri (LHS) dari '=' simbol

Untuk auto-dilaksanakan properti, dukungan lapangan pekerjaan di belakang layar dan tidak terlihat.

Contoh:

public string Log { get; set; }

Sedangkan untuk non auto-dilaksanakan properti dukungan lapangan dimuka, terlihat sebagai pribadi scoped variabel.

Contoh:

private string log;

public string Log
{
    get => log;
    set => log = value;
}

Juga, patut dicatat di sini adalah 'getter' dan 'setter' dapat menggunakan berbeda 'dukungan field'

Komentar (3)