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

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

รู้จักต้นแบบหรือคลาส จะเขียนโปรแกรม C# ได้ดี

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


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

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

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

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

4 สร้างอ๊อปเจ็ค using System; namespace ConsoleApplication1 {
class Program static void Main(string[] args) Customer c1 = new Customer(); } C# Programming with Visual C# 2010 Express

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

6 สร้างอโนนิมัสคลาส var contacts = new[ ] { new { Name = "Monchai",
Tel = new[ ] { " ", " " } }, Name = "Chartree", Tel = new[] { " " } } }; C# Programming with Visual C# 2010 Express

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

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

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

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

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

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

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

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

15 ตัวอย่างคลาส Customer
class Customer { private static int next_id = 1; private int id; private string name;   public Customer( ) { } public Customer(string name):this( ) { } public void SetName(string name) { } public string GetName( ) { } public int GetId( ) { } public void Info( ) { } } C# Programming with Visual C# 2010 Express

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

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

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 Express

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

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

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

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

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

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

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

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

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

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

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

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


ดาวน์โหลด ppt รู้จักต้นแบบหรือคลาส จะเขียนโปรแกรม C# ได้ดี

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


Ads by Google