-
วิธีใช้ชุด C# และรับ
ภาษา C# มีสองฟังก์ชัน - ฟังก์ชันการกำหนด (get) และฟังก์ชันค่า (set) ซึ่งสามารถมองเห็นได้ชัดเจนจากโค้ดภาษากลางที่สร้างขึ้น C# ไม่สนับสนุนการตั้งค่าระดับการป้องกันของโดเมนให้เป็นสาธารณะ และอนุญาตให้ผู้ใช้ดำเนินการนอกชั้นเรียนโดยพลการ ซึ่งถือว่า unOO เกินไป หรือเฉพาะเจาะจงมากขึ้น ไม่ปลอดภัยเกินไป! สำหรับทุกฟิลด์ที่ต้องมองเห็นได้นอกคลาส C# ขอแนะนำให้ใช้แอตทริบิวต์เพื่อแสดงฟิลด์เหล่านั้น แอ็ตทริบิวต์ไม่ได้แสดงถึงตำแหน่งพื้นที่เก็บข้อมูล ซึ่งเป็นความแตกต่างพื้นฐานระหว่างแอททริบิวต์และโดเมน ต่อไปนี้คือการออกแบบคุณลักษณะทั่วไป:
ใช้ระบบ;
คลาสMyClass
-
จำนวนเต็ม int;
int สาธารณะจำนวนเต็ม
-
รับ {จำนวนเต็มส่งคืน;}
ตั้งค่า {จำนวนเต็ม=ค่า;}
-
-
การทดสอบในชั้นเรียน
-
โมฆะคงที่สาธารณะ Main()
-
MyClass MyObject=ใหม่ MyClass();
Console.Write (MyObject.Integer);
MyObject.จำนวนเต็ม++;
Console.Write (MyObject.Integer);
-
-
ตามที่คาดไว้ โปรแกรมเอาต์พุต 0 1 เราจะเห็นได้ว่าแอ็ตทริบิวต์ทำให้โปรแกรมเมอร์มีอินเทอร์เฟซการเข้าถึงที่เป็นมิตรสำหรับสมาชิกโดเมนโดยวิธีการตัดคำ ค่าที่นี่คือคีย์เวิร์ดของ C# ซึ่งเป็นพารามิเตอร์โดยนัยของ set เมื่อเราดำเนินการกับแอ็ตทริบิวต์ นั่นคือ rvalue เมื่อเราดำเนินการเขียนแอ็ตทริบิวต์
แอ็ตทริบิวต์มีการดำเนินการอินเทอร์เฟซสามแบบ: อ่านอย่างเดียว (รับ) เขียนอย่างเดียว (ชุด) และอ่าน-เขียน (รับและตั้งค่า) การดำเนินการทั้งสามนี้บนโดเมนจะต้องประกาศภายใต้ชื่อแอตทริบิวต์เดียวกัน และไม่สามารถแยกออกจากกันได้ ดูการใช้งานต่อไปนี้:
คลาสMyClass
-
ชื่อสตริงส่วนตัว
ชื่อสตริงสาธารณะ
-
รับ { ชื่อกลับ;
-
ชื่อสตริงสาธารณะ
-
ตั้งค่า { ชื่อ = ค่า; }
-
-
วิธีการแยกการใช้งานแอตทริบิวต์ Name ข้างต้นไม่ถูกต้อง! เราควรนำมารวมกันเหมือนในตัวอย่างก่อนหน้านี้ เป็นที่น่าสังเกตว่าคุณสมบัติทั้งสาม (อ่านอย่างเดียว เขียนอย่างเดียว อ่าน-เขียน) ถือเป็นชื่อคุณสมบัติเดียวกันโดย C# ดูตัวอย่างต่อไปนี้:
คลาสMyClass
-
ป้องกัน int num = 0;
เลขหมายสาธารณะ
-
ชุด
-
num=ค่า;
-
-
-
คลาส MyClassDerived: MyClass
-
เลขหมายสาธารณะใหม่
-
รับ
-
หมายเลขส่งคืน;
-
-
-
การทดสอบในชั้นเรียน
-
โมฆะคงที่สาธารณะ Main()
-
MyClassDerived MyObject = ใหม่ MyClassDerived();
//MyObject.Num= 1; //ผิดพลาด!
((MyClass)MyObject).Num = 1;
-
-
เราจะเห็นว่าแอตทริบิวต์ Num-get{} ใน MyClassDerived บล็อกคำจำกัดความของแอตทริบิวต์ Num-set{} ใน MyClass
แน่นอนว่าแอ็ตทริบิวต์เป็นมากกว่าการดำเนินการของอินเทอร์เฟซโดเมน สาระสำคัญของแอ็ตทริบิวต์ยังคงเป็นวิธีการ เราสามารถตรวจสอบ คำเตือน และการดำเนินการเพิ่มเติมอื่น ๆ ตามตรรกะของโปรแกรมเมื่อแยกหรือกำหนดคุณลักษณะ
คลาสMyClass
-
ชื่อสตริงส่วนตัว
ชื่อสตริงสาธารณะ
-
รับ { ชื่อกลับ;
ชุด
-
ถ้า (ค่า==null)
ชื่อ = "ไมโครซอฟต์";
อื่น
ชื่อ=ค่า;
-
-
-
เนื่องจากธรรมชาติของวิธีการของคุณลักษณะ แน่นอนว่าคุณลักษณะจึงมีการปรับเปลี่ยนวิธีการต่างๆ มากมาย คุณลักษณะยังมีตัวแก้ไขการเข้าถึง 5 ตัว แต่ตัวแก้ไขการเข้าถึงของคุณลักษณะมักจะเป็นแบบสาธารณะ ไม่เช่นนั้นเราจะสูญเสียความหมายของคุณลักษณะที่เป็นอินเทอร์เฟซสาธารณะของคลาส นอกเหนือจากการขาดคุณสมบัติคุณลักษณะ เช่น การโอเวอร์โหลดเมธอดที่มาจากพารามิเตอร์หลายตัวของเมธอด ตัวดัดแปลง เช่น เสมือน การปิดผนึก การแทนที่ และนามธรรม ก็มีพฤติกรรมเหมือนกันสำหรับคุณลักษณะและเมธอด อย่างไรก็ตาม เนื่องจากโดยพื้นฐานแล้วแอ็ตทริบิวต์จะถูกนำไปใช้เป็นสองวิธี พฤติกรรมบางอย่างนั้นต้องได้รับการดูแลจากเรา ดูตัวอย่างต่อไปนี้:
นามธรรมคลาส A
-
อินท์ วาย;
int X เสมือนสาธารณะ
-
รับ { กลับ 0;
-
สาธารณะเสมือน int Y
-
รับ { กลับ y; }
ตั้งค่า { y = ค่า; }
-
บทคัดย่อสาธารณะ int Z { รับ;
-
คลาส B: ก
-
อินท์ซี;
การแทนที่สาธารณะ int X
-
รับ { ส่งคืนฐาน X + 1;
-
การแทนที่สาธารณะ int Y
-
ตั้งค่า { base.Y = ค่า < 0? 0: ค่า;
-
การแทนที่สาธารณะ int Z
-
รับ { กลับ z;
ตั้งค่า { z = ค่า;
-
-
ตัวอย่างนี้เน้นการทำงานทั่วไปบางอย่างของคุณสมบัติในบริบทของการสืบทอด ในที่นี้ จะต้องประกาศคลาส A เป็นนามธรรมเนื่องจากมีแอตทริบิวต์นามธรรม Z คลาสย่อย B หมายถึงคุณลักษณะของคลาสพาเรนต์ A ผ่านคีย์เวิร์ดฐาน คลาส B สามารถเขียนทับคุณลักษณะเสมือนในคลาส A ผ่าน Y-set เท่านั้น
คุณสมบัติแบบคงที่ เช่นเดียวกับวิธีการแบบคงที่ สามารถเข้าถึงได้เฉพาะตัวแปรโดเมนแบบคงที่ของคลาสเท่านั้น นอกจากนี้เรายังสามารถประกาศคุณสมบัติภายนอกได้เช่นเดียวกับที่เราทำวิธีการภายนอก