งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

Visual C# 2010 Express 8. Class รู้จักต้นแบบหรือคลาส จะเขียน โปรแกรม C# ได้ดี 1C# Programming with Visual C# 2010 Express.

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "Visual C# 2010 Express 8. Class รู้จักต้นแบบหรือคลาส จะเขียน โปรแกรม C# ได้ดี 1C# Programming with Visual C# 2010 Express."— ใบสำเนางานนำเสนอ:

1 Visual C# 2010 Express 8. Class รู้จักต้นแบบหรือคลาส จะเขียน โปรแกรม C# ได้ดี 1C# Programming with Visual C# 2010 Express

2 เป้าหมายการเรียนรู้  การสร้าง คลาส อ๊อปเจ็ค อโนนิมัสคลาส  การสร้างคอนสตรักเตอร์  การสร้างค่าสเตติกของคลาส  การควบคุมการมองเห็นของคลาส  พร็อบเพอร์ตี้และอินเด็กเซอร์  พาร์เทียลคลาส และเมทธอด  คลาสซ้อนคลาส 2C# Programming with Visual C# 2010 Express

3 การสร้างคลาส C# Programming with Visual C# 2010 Express3 1. สร้างแอปพลิเคชั่น เลือเป็น คอนโซลแอปฯ 2. คลิกเลือก Project > Add Class 3. เขียน ตามโค้ด class Customer 2.{ 3. public string name; //field 4. public void Order()//method 5. { 6. Console.WriteLine("I order product1."); 7. } 8.} การสร้างคลาสแบบนี้เป็นการแยกไฟล์ ควรให้ ชื่อไฟล์ เหมือนกับชื่อคลาส ซึ่งจะสร้างรวมกับ ไฟล์ หลักก็ได้

4 สร้างอ๊อปเจ็ค 1. using System; 2. namespace ConsoleApplication1 3. { 4. class Program 5. { 6. static void Main(string[] args) 7. { 8. Customer c1 = new Customer(); 9. } 10. } 11. } C# Programming with Visual C# 2010 Express4

5 ใช้งานอ๊อปเจ็ค ผ่านเมธอหลัก 1. static void Main(string[] args) 2. { 3. Customer c1 = new Customer(); 4. c1.name = "Monchai"; 5. c1.Order(); 6. } C# Programming with Visual C# 2010 Express5

6 สร้างอโนนิมัสคลาส 1. var contacts = new[ ] 2. { 3. new { 4. Name = "Monchai", 5. Tel = new[ ] { " ", " " } 6. }, 7. new { 8. Name = "Chartree", 9. Tel = new[] { " " } 10. } 11. }; C# Programming with Visual C# 2010 Express6

7 การสร้างคอนสตรักเตอร์ (Constructor)  ทุกครั้งที่มีการสร้างออบเจ็กต์ หรือการเกิดขึ้นของวัตถุ จะมีเมธ อดหนึ่งทำงาน เมธอดนั้นคือ คอนสตรักเตอร์ (Constructor)  ชื่อของคอนสตรักเตอร์จะมีชื่อเหมือนชื่อคลาสตัวเอง  คอนสตรักเตอร์จะทำงานเสมอ แม้ไม่ได้เขียนไว้  คอนสตักเตอร์มีลักษณะคล้ายเมทธอด มีการโอเวอร์โหลดได้ แต่ ไม่มีการคืนค่าแม้ void ก็ใช้ไม่ได้  นิยมใช้คอนสตรักเตอร์เพื่อสร้างค่าเริ่มต้นให้กับฟิลด์ต่างๆ ของ ออบเจ็กต์ C# Programming with Visual C# 2010 Express7 Class Customer() { public Customer( ) { } // this is a constructor }

8 ตัวอย่างการสร้างค่าเริ่มต้น และเรียกใช้งาน 1. class Program { 2. static void Main(string[ ] args) { 3. Customer c1 = new Customer(); 4. Console.WriteLine(c1.name);// Print "Theerapone" 5. } 6. } 7. class Customer { 8. public String name; 9. public Customer( ) { 10. this.name = "Theerapone"; 11. } 12. } C# Programming with Visual C# 2010 Express8

9 ค่าสเตติก (ตัวแปรของคลาส - class variable)  การสร้างให้มีรหัสมีการเปลี่ยนเสมอได้เองทุกครั้งที่สร้าง ออปเจ็กต์ เช่น มีค่ารหัสลูกค้ารายแรกเป็น 1 รายที่สองเป็น 2 รายที่สามเป็น 3 และรายต่อๆไปมีค่าเพิ่มทีละหนึ่ง  ค่าประจำคลาส ที่ทุกออปเจ็กต์ใช้ร่วมกัน เรียกค่านี้ว่า static  ค่าสเตติกนี้ ใช้งานได้ทันทีโดยไม่ต้องสร้างเป็นออปเจ็ค ดังเช่น เมธอด Main( )  คลาสใดมีค่าสเตติก อยู่ ก็สามารถเรียกใช้ในเมธอด Main( ) โดยไม่ต้องสร้างเป็นออปเจ็กต์  การประยุกต์ค่าสเตติก เพื่อกำหนดค่าเริ่มต้นให้กับออปเจ็กต์ ได้ เช่น การเพิ่มค่าออปเจ็กต์ให้มีค่ารหัสลูกค้าเพิ่มที่ละหนึ่ง C# Programming with Visual C# 2010 Express9

10 ตัวอย่าง การใช้สร้างตัวแปรของคลาส 1. class Customer { 2. public static int next_id = 1; 3. public int id; 4. public string name; //field 5. public void Order()//method { 6. Console.WriteLine("I order product1."); 7. } 8. public Customer( ) { 9. this.id = next_id; 10. next_id += 1; 11. } 12. } C# Programming with Visual C# 2010 Express10 คีย์เวิร์ด this ใช้กับตัวแปรของออปเจ็กต์เท่านั้น ใช้กับตัวแปรของคลาสไม่ได้

11 การทำโอเวอร์โหลดคอนสตรักเตอร์  คอนสตรักเตอร์สามารถทำโอเวอร์โหลด ได้ เท่ากับ ทำให้วัตถุ เกิดได้หลายแบบ  การกำหนดให้ชื่อรับค่าขณะรันไทม์ เพื่อกำหนดค่าเริ่มต้นในการ สร้างออปเจ็กต์ ผ่านตัวแปรเข้าของคอนตรักเตอร์ได้  คอนสตรักเตอร์ ที่ไม่มีตัวแปรเข้า จะเป็นคอนตรักเตอร์ปริยาย (default)  การเขียนคอนตรักเตอร์ที่ไม่ใช่คอนตรักเตอร์ปริยาย (custom constructor) คอมไพเลอร์ของซีชาร์ป ไม่สร้างคอนสตรักเตอร์ป ริยายให้ จะต้องเขียนเพิ่มเอง  ใช้คำสั่ง this( ) เป็นการเรียกคอนสตรักเตอร์ปริยาย  ใช้คำสั่ง this เป็นการเรียกออปเจ็กต์ ซึ่งใช้แยกความแตกต่างกับ ตัวแปรเข้า ที่มีชื่อเหมือนกับสมาชิกของออปเจ็กต์ได้ C# Programming with Visual C# 2010 Express11

12 ตัวอย่าง การมีคอนสตรักเตอร์สองตัว 1. class Customer 2. { 3. public static int next_id = 1; 4. public int id; 5. public string name; //field 6. public Customer( ) { this.id = next_id; next_id += 1; } 7. public Customer(string name):this( ) { this.name = name; } 8. } C# Programming with Visual C# 2010 Express12 1.static void Main(string[] args) 2.{ 3. Customer c1 = new Customer("theerapon"); 4. Customer c2 = new Customer("monchai"); 5.}

13 กำหนดค่าเริ่มต้นโดยไม่ใช้คอนสตรักเตอร์ช่วย  การสร้างค่าเริ่มต้นพร้อมกับสร้างออบเจ็กต์ หรืออินแตทซ์ ลูกค้า โดยไม่ได้ใช้คอนสตรักเตอร์ที่กำหนดค่าเริ่มต้น ในซี ชาร์ป สามารถทำได้ เหมือนเราเคยเห็นการสร้างแบบนี้มา บ้าง ทั้งใน เรื่อง อะเรย์ และเอ็กเซ็บชัน  การสร้างค่าเริ่มต้นพร้อมกับสร้างออบเจ็กต์ ทำได้โดยการ ระบุชื่อฟิลด์ ให้เท่ากับอะไร ให้อยู่ภายในวงเล็บปีกกา C# Programming with Visual C# 2010 Express13 1.static void Main(string[ ] args) 2.{ 3. Customer c1 = new Customer( ) { name = "pone" }; 4.}

14 การควบคุมการมองเห็นสมาชิกคลาส  public เป็นระดับที่กว้างที่สุด ที่ทุกคลาสใน และนอกแอส แซมบลีมองเห็นได้  internal มองให้ในระดับแอสแซมบลีเดียวกัน  private มองเห็นได้เฉพาะภายในคลาสเดียวกัน  การไม่กำหนด ตัวควบคุมการมองเห็น กับคลาส ทำให้คลาส นั้นเป็น internal แต่ถ้าไม่กำหนดในสมาชิกภายในคลาส ทำให้สมาชิกนั้นเป็น private  เมธอดนิยมสร้างเป็น public ฟิลด์นิยมสร้างเป็น private C# Programming with Visual C# 2010 Express14

15 ตัวอย่างคลาส Customer 1. class Customer 2. { 3. private static int next_id = 1; 4. private int id; 5. private string name; 6. public Customer( ) { } 7. public Customer(string name):this( ) { } 8. public void SetName(string name) { } 9. public string GetName( ) { } 10. public int GetId( ) { } 11. public void Info( ) { } 12. } C# Programming with Visual C# 2010 Express15

16 Property  การใช้พร็อปเพอร์ตี้ มีความสะดวกแบบเดียวกับใช้งานฟิลด์ เพราะการเรียกใช้เหมือนการใช้งานฟิลด์มาก เช่น ฟิลด์ name กำหนดให้เท่ากับอะไรก็ใช้เครื่องหมายเท่ากับ ชื่อได้ เลย  พร็อปเพอร์ตี้มีความปลอดภัยแบบเดียวกับเมธอด เพราะ ภายในเมธอดอาจมีเรื่องกรองข้อมูลเข้า ร่วมกับเอ็กเซ็บชัน  พร๊อปเพอร์ตี้สนับสนุนการทำ data binding กับคอนโทรล  ดูตัวอย่างต่อไปนี้ ที่ต้องการเพิ่มค่าทีละหนึ่งค่า ด้วยวิธีการ ของพร๊อบเพอร์ตี้ เข้าใจง่ายกว่า ทำได้ง่ายกว่า 1. this.GetId( ) + 1; //Method 2. this.Id++; //Property C# Programming with Visual C# 2010 Express16

17 พร็อปเพอร์ตี้ใช้ร่วมกับ exception 1. public class Customer{ 2. private string _name; 3. public string Name { 4. get { return _name; } 5. set { 6. if (( value == null ) || ( value.Length == 0 )) 7. throw new ArgumentException( 8. "Name cannot be blank“, Name" ); 9. _name = value; 10. } 11. } C# Programming with Visual C# 2010 Express17

18 การเขียนพร็อปเพอร์ตี้  การเขียนอย่างสั้น พิมพ์ “prop” แล้วกดแทปๆ public int MyProperty { get; set; }  การเขียนเต็มรูปแบบ พิมพ์ “propfull” แล้วกดแทปๆ private int myVar; public int MyProperty { get { return myVar; } set { myVar = value; } } C# Programming with Visual C# 2010 Express18

19 การปรับแต่งพร็อปเพอร์ตี้  พร๊อบเพอร์ตี้ สามารถทำได้ทั้งอ่าน และเขียน การ กำหนดค่าพร็อปเพอร์ตี้ให้สามารถอ่านได้อย่างเดียว ทำได้ โดยมีเพียง get เพียงอย่างเดียว หรือต้องการให้เขียนได้ อย่างเดียว ทำได้เพียงมีเพียง set หรือจะต้องการให้ บางส่วนมถ้าการมองเป็นเฉพาะคลาสก็สามารถใส่ส่วนการ ควบคุมการมองเห็นเป็น private ได้ private int myVar; public int MyProperty { get { return myVar; } private set { myVar = value; } } C# Programming with Visual C# 2010 Express19

20 Indexer  เด็กเซอร์เป็นสมาชิกประเภทหนึ่งของคลาส มีลักษณะคล้าย กับพร็อปเพอร์ตี้  การใช้งานของอินเด็กซ์มีลักษณะการใช้งานคล้ายกับอะเรย์ การใช้งานอินเด็กเซอร์จึงใช้ได้หลายตัวเหมือนกับที่อะเรย์ หนึ่งมีสมาชิกได้หลายตัว  การเข้าถึงอินเด็กเซอร์แต่ละตัว ใช้แบบเดียวกับอาร์เรย์  การสร้างอินเด็กซ์ ควรมีตัวควบคุมการมองเห็นเป็น public และมีตัวคืนค่า ใช้คีย์เวิร์ด this[ ]  ในการเขียนอินเด็กเซอร์ อาจพิมพ์ index แล้วกด Tab โปรแกรม Visual C# จะสร้างโครงสร้างอินเด็กเซอร์ให้ อัตโนมัติ C# Programming with Visual C# 2010 Express20

21 ตัวอย่าง การสร้างอินเด็กเซอร์ และใช้งาน 1. class TelList 2. { 3. private string[ ] list; 4. public string this[int index] 5. { 6. get { return list[index]; } 7. set { list[index] = value; } 8. } 9. public TelList() 10. { 11. list = new string[3]; 12. } 13. } C# Programming with Visual C# 2010 Express21 1. static void Main(string[] args) 2. { 3. TelList tels = new TelList(); 4. tels[0] = " "; 5. tels[1] = " "; 6. for (int i = 0; i < 3; i++) 7. { 8. if (tels[i] == null) tels[i] = "N/A"; 9. Console.WriteLine("Tel " + tels[i]); 10. } 11. Console.ReadKey(); 12. }

22 ข้อแตกต่างของอินเด็กเซอร์ กับอะเรย์ และพร๊อบเพอร์ตี้ 1. อินเด็กเซอร์ สามารถใช้ตัวอักษรแทนดัชนีได้ แต่อะเรย์ ต้องใช้ตัวเลขเท่านั้นแทนเลขดัชนีที่จะเขียนหรืออ่าน ข้อมูลในอะเรย์ เช่น อินเด็กเซอร์ ใช้ชื่อเล่นแทนดัชนี แต่ การเก็บจะใช้ชื่อจริง ดังเขียนเป็นตัวอย่างคือ Customer[“Pone”] = “Theerapone” 2. อินเด็กเซอร์สามารถทำโอเวอร์โหลดได้ 3. ใช้อินเด็กเซอร์ประกาศเป็นตัวแปรไม่ได้ และตัวแปรเข้า ของอินเด็กเซอร์ใช้เป็น ref หรือ out ไม่ได้ 4. อินเด็กเซอร์เป็นค่าสเตติกไม่ได้ C# Programming with Visual C# 2010 Express22

23 Partial Class  พาร์เทียลคลาส หรือคลาสบางส่วน เป็นการเขียนเพียง บางส่วนของคลาส หรือของเมธอด ด้วยเหตุผลของซ่อนบาง รายละเอียด ของผู้พัฒนา หรือเพียงต้องการให้ผู้พัฒนา พัฒนาเพิ่มเติมเพียงบางส่วน เช่น ใน Windows Form Application หรือ Windows Presentation Foundation Application จะมีส่วนที่ให้ผู้เขียนโปรแกรมต่อเติมในส่วน ของ การทำงานกับ ยูสเซอร์อินเทอร์เฟส (user interface)  การสร้างคลาสบางส่วน สามารถเขียนคลาสบางส่วนใน หลายไฟล์ได้ แต่ต้องใช้คีย์เวิร์ด “partial” หน้าคลาส C# Programming with Visual C# 2010 Express23 public partial class Customer { //... }

24 ในการสร้างคลาสบางส่วน มีกฏ และแนวทางดังนี้  แต่ละส่วนของคลาสต้อง มีครบทุกไฟล์ของคลาสบางส่วน เมื่อต้องคอมไฟล์ นั้นคือจะคอมไพล์เพียงบางไฟล์ไม่ได้ และ ทั้งหมดต้องอยู่ในแอสแซมบลีเดียวกัน  ใช้คีย์เวิร์ด partial ระบุให้รู้ว่าเป็นคลาสบางส่วน นำหน้าชื่อ คลาส C# Programming with Visual C# 2010 Express24 // File1.cs namespace SalemanShip { public partial class Customer { //... } // File2.cs namespace SalemanShip { public partial class Customer { //... }

25 Partial Method  สำหรับเมธอดบางส่วน มีการสร้างคล้ายๆ กับคลาสบางส่วน จะมีการเขียนขยายเพิ่มเติมในไฟล์ใหม่มีเป็นคลาสบางส่วน ในกรณีที่ได้นิยามเมธอดบางส่วนไว้ แต่ไม่ได้เขียนขยายอยู่ จริงในไฟล์ใด เมธอดนี้ จะถูกลบ หรือถูกข้ามไป เมธอด หรือสเตทเม้นท์เรียกใช้งาน เมธอดบางส่วน จะถูกยกเลิกไป อัตโนมัติ  ในการสร้างเมธอดบางส่วน มีกฏ และแนวทางดังนี้  เมธอดบางส่วนมีการคืนเป็นชนิด void ได้เท่านั้น  เมธอดบางส่วน จะต้องมีความหมายโดยนัยเป็น private (ไม่ต้อง ใส่คีย์เวิร์ด private)  ใช้คีย์เวิร์ด partial นำหน้า void C# Programming with Visual C# 2010 Express25

26 คลาสในคลาส (Nested Class)  คลาสในคลาสสามารถทำได้ เปรียบเสมือนการเป็นสมาชิก ตัวหนึ่งของคลาส การควบคุมการมองเห็น มีลักษณะ เหมือนกับเป็นสมาชิกทั่วไป ในซีชาร์ป สามารถกำหนดให้ โครงสร้างของ คลาส สตรัก(struct) อินเตอร์เฟส อีนัม และลี ดีเกท สามารถอยู่ในคลาสได้ C# Programming with Visual C# 2010 Express26 class Customer { public class Address { public string number; public string road; public string tumbon; public string amper; public string junvat; }

27 ประโยชน์ของการสร้างคลาสในคลาส  คลาสในคลาสเป็นการประกาศในขอบเขตที่กำหนดได้ด้วย การควบคุมการมองเห็นเหมือนกับที่ใช้ได้กับสมาชิกทั่วไป ช่วยให้ไม่ต้องประกาศขอบเขตสากล หรือในพื้นที่เนมสเปส เดียวกัน  เป็นโครงสร้างทางภาษาที่สร้างทางลือกได้มากขึ้น เช่น แทนที่จะมี คลาสลูกค้า คลาสที่อยู่ เราใช้เพียงคลาส Customer.Address ให้อยู่โครงสร้างเดียวกัน C# Programming with Visual C# 2010 Express27

28 ตัวอย่างการใช้งานคลาสในคลาส  การใช้งานคลาสในคลาส จะต้องประกาศสร้างออบเจ็กต์ ใหม่เหมือนกับคลาสทั่วไป แต่ต้องระบุชื่อคลาสนอกก่อน เท่านั้น C# Programming with Visual C# 2010 Express28 1.static void Main(string[] args) 2.{ 3.Customer.Address c1Address = new Customer.Address(); 4.c1Address.number = "137"; 5.c1Address.road = "Vipavadee"; 6.c1Address.tumbon = "Samambin"; 7.c1Address.amper = "Donmuang"; 8.c1Address.junvat = "Bangkok“; }

29 คำถามทบทวน 1. ให้อธิบายความแตกต่างระหว่างคลาส กับ ออบเจ็กต์ 2. อะไรคือความแตกต่างระหว่างฟิล์ด กับ เมธอด 3. ให้สร้างอโนนิมัสคลาส ที่มีสมาชิกสองตัวคือ Id และ Name มีค่า Id=1 และ Name=”Theerapone” 4. จะใช้คำสั่งอย่างไรในการให้คอนสตรักเตอร์หนึ่งเรียกอีก คอนสตรักเตอร์หนึ่ง 5. จะเกิดอะไรขึ้นเมื่อได้สร้างคอนสตรักเตอร์ที่ตัวแปรเข้าได้ (ไม่ใช่คอนสตรักเตอร์ปริยาย) แต่ในการสร้างอินแตทซ์ ได้เรียกคอนสตรักเตอร์ปริยาย 6. ให้เปรียบเทียบโค้ดการสร้างค่าเริ่มต้นของอะเรย์ กับการ สร้างค่าเริ่มต้นของออบเจ็กต์ ที่ไม่ได้ใช้คอนสตรักเตอร์ C# Programming with Visual C# 2010 Express29

30 คำถามทบทวน 7. ให้เขียน พร็อปเพอร์ตี้ของฟิลด์ next_id ให้เขียนค่าได้ อย่างเดียว และมีลักษณะเป็น static 8. จะใช้คีย์เวิร์ด this กับ ค่าสเตติก หรือตัวแปรของคลาสได้ หรือไม่ 9. เมื่อการใช้โค้ดลัด “prop” เพื่อสร้างพร็อปเพอร์ตี้ ชื่อ Name จะได้ผลโค้ดเป็นเช่นใด 10. ชื่ออินเด็กเซอร์ เขียนอย่างไร 11. พาร์เทียลคลาส และพาร์เทียลเมธอด ต่างกันอย่างไร 12. การสร้างออบเจ็กต์ คลาสในคลาส จะใช้วิธีการสร้าง อย่างไร C# Programming with Visual C# 2010 Express30


ดาวน์โหลด ppt Visual C# 2010 Express 8. Class รู้จักต้นแบบหรือคลาส จะเขียน โปรแกรม C# ได้ดี 1C# Programming with Visual C# 2010 Express.

งานนำเสนอที่คล้ายกัน


Ads by Google