ดังนั้นฉันเข้าใจว่ามัน{ get; set; }
เป็น "คุณสมบัติอัตโนมัติ" ซึ่งเหมือนกับ @Klaus และ @Brandon กล่าวว่าเป็นการจดชวเลขเพื่อเขียนคุณสมบัติด้วย "เขตข้อมูลสำรอง" ดังนั้นในกรณีนี้:
public class Genre
{
private string name; // This is the backing field
public string Name // This is your property
{
get => name;
set => name = value;
}
}
อย่างไรก็ตามถ้าคุณชอบฉัน - ประมาณหนึ่งชั่วโมงก่อนหน้านี้ - คุณไม่เข้าใจว่าคุณสมบัติและอุปกรณ์เสริมคืออะไรและคุณไม่มีความเข้าใจที่ดีที่สุดเกี่ยวกับคำศัพท์พื้นฐานบางอย่าง MSDN เป็นเครื่องมือที่ยอดเยี่ยมสำหรับการเรียนรู้สิ่งต่าง ๆ เช่นนี้ แต่มันไม่ง่ายที่จะเข้าใจสำหรับผู้เริ่มต้น ดังนั้นฉันจะพยายามอธิบายให้ลึกซึ้งยิ่งขึ้นที่นี่
get
และset
เป็นaccessorsซึ่งหมายความว่าพวกเขาสามารถเข้าถึงข้อมูลและข้อมูลในเขตข้อมูลส่วนตัว (โดยทั่วไปจากเขตข้อมูลสำรอง ) และมักทำจากคุณสมบัติสาธารณะ (ดังที่คุณเห็นในตัวอย่างด้านบน)
ไม่มีการปฏิเสธว่าข้อความข้างต้นค่อนข้างสับสนดังนั้นเรามาดูตัวอย่าง สมมติว่ารหัสนี้หมายถึงประเภทของดนตรี ดังนั้นในประเภทคลาสเราจะต้องการแนวเพลงที่แตกต่าง สมมติว่าเราต้องการมี 3 ประเภท: ฮิปฮอปร็อคและประเทศ ในการทำเช่นนี้เราจะใช้ชื่อClassเพื่อสร้างอินสแตนซ์ใหม่ของคลาสนั้น
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)
ตอนนี้เราได้สร้างอินสแตนซ์ของคลาส Genre แล้วเราสามารถตั้งชื่อประเภทโดยใช้คุณสมบัติ 'ชื่อ' ที่ตั้งค่าไว้ด้านบน
public string Name //Again, this is the 'Name' property
{ get; set; } //And this is the shorthand version the process we're doing right now
เราสามารถตั้งชื่อ 'g1' เป็น Hip Hop ได้โดยการเขียนสิ่งต่อไปนี้
g1.Name = "Hip Hop";
สิ่งที่เกิดขึ้นที่นี่เป็นเรื่องซับซ้อน อย่างที่ฉันพูดไว้ก่อนหน้านี้get
และset
การเข้าถึงข้อมูลจากเขตข้อมูลส่วนตัวที่คุณไม่สามารถเข้าถึงได้ get
สามารถอ่านข้อมูลจากฟิลด์ส่วนตัวนั้นและส่งคืนได้ set
สามารถเขียนข้อมูลในเขตข้อมูลส่วนตัวนั้นเท่านั้น แต่ด้วยการมีคุณสมบัติที่มีทั้งสองอย่างget
และset
เราสามารถทำหน้าที่ทั้งสองนั้นได้ และโดยการเขียนg1.Name = "Hip Hop";
เราใช้set
ฟังก์ชันจากคุณสมบัติชื่อของเรา
set
value
ใช้ตัวแปรโดยปริยายเรียกว่า โดยทั่วไปความหมายนี้คือเมื่อใดก็ตามที่คุณเห็น "ค่า" ภายในset
หมายถึงตัวแปร ตัวแปร "value" เมื่อเราเขียนg1.Name =
เรากำลังใช้=
ที่จะผ่านในตัวแปรซึ่งในกรณีนี้คือvalue
"Hip Hop"
ดังนั้นคุณสามารถคิดแบบนี้ได้:
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"'
}
}
สิ่งสำคัญคือให้สังเกตว่าตัวอย่างข้างต้นไม่ได้เขียนไว้ในรหัส มันเป็นรหัสสมมุติมากกว่าที่แสดงถึงสิ่งที่เกิดขึ้นในพื้นหลัง
ดังนั้นตอนนี้เราจึงตั้งชื่ออินสแตนซ์ชื่อของ g1 ของประเภทผมเชื่อว่าเราจะได้รับชื่อโดยการเขียน
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"
และถ้าเราทำสิ่งนี้เราจะเข้าไป"Hip Hop"
อยู่ในคอนโซลของเรา
ดังนั้นเพื่อจุดประสงค์ของคำอธิบายนี้ฉันจะทำตัวอย่างด้วยผลลัพธ์เช่นกัน
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);
}
}
เอาท์พุท:
"Genres: Hip Hop, Rock, Country"