TOC

This article is currently in the process of being translated into Thai (~99% done).

Classes:

Interfaces

ในบทที่แล้วเราเรียนเกี่ยวกับ abstract class ส่วน interface ก็จะคล้ายกับ abstract class เช่น เราไม่สามารถสร้าง instance object ของ interface ได้ มันจะค่อนข้างเป็นการออกแบบส่วนของแนวคิดโครงสร้างโปรแกรมมากกว่า เพราะเราจะสร้าง method ใน interface แต่จะไม่โค้ดการใช้งานใน method นั้น ใน interface จะไม่มี field แต่อาจจะมี property, indexer, หรือ event ก็ได้ ที่เราจำเป็นต้องใช้ interface เพราะใน C# เราไม่สามารถสืบทอดคุณลักษณะ (inheritance) จากหลายๆ class ได้ เราจึงจำเป็นต้องใช้ interface

ตัวอย่างด้านล่างเป็นตัวอย่างของ interface ลองทำความเข้าใจกับมันก่อนที่จะดูคำอธิบาย

using System;
using System.Collections.Generic;

namespace Interfaces
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Dog> dogs = new List<Dog>();
            dogs.Add(new Dog("Fido"));
            dogs.Add(new Dog("Bob"));
            dogs.Add(new Dog("Adam"));
            dogs.Sort();
            foreach(Dog dog in dogs)
                Console.WriteLine(dog.Describe());
            Console.ReadKey();
        }
    }

    interface IAnimal
    {
        string Describe();

        string Name
        {
            get;
            set;
        }
    }

    class Dog : IAnimal, IComparable
    {
        private string name;

        public Dog(string name)
        {
            this.Name = name;
        }

        public string Describe()
        {
            return "Hello, I'm a dog and my name is " + this.Name;
        }

        public int CompareTo(object obj)
        {
            if(obj is IAnimal)
                return this.Name.CompareTo((obj as IAnimal).Name);
            return 0;
        }

        public string Name
        {
            get { return name; }
            set { name = value; }
        }
    }
}

เรามาเริ่มดูกันที่ส่วนกลางของโค้ด ที่เราตั้งค่า interface สิ่งที่แตกต่างจาก class ก็คือ การใช้ keyword interface แทน keyword class ส่วนใหญ่เราจะตั้งชื่อ interface นำหน้าด้วย I เพราะจะทำให้เราแยกความแตกต่างได้ง่ายระหว่าง interface และ class

หลังจากนั้นเราก็จะมาตั้งค่าให้ method และ property ซึ่งจะใช้ set และ get เพื่อให้สามารถเข้าถึง read/write ของ property ได้ และอาจจะสังเกตได้ว่า จะไม่มี public, private, protected, หรือ keyword อื่นๆ เพราะ interface จะเป็น public by default

ตอนนี้เรามาดูที่ Dog class เราจะใช้เครื่องหมาย colon (:) ระหว่างชื่อ sub class และชื่อ base class/interface ในตัวอย่างเราใช้ 2 interface (IAnimal และ IComparable) เราจะแยกด้วยเครื่องหมาย comma (,) เราจะใช้ interface กี่ตัวก็ได้ เราสามารถใช้ method และ property จาก IAnimal interface และ จาก IComparable interface ได้

พอเราใช้ interface เราก็ไม่จำเป็นต้องโค้ด method เองทั้งหมด เราแค่ interface มันแล้วก็เอา method จาก interface นั้นๆมาใช้ ตัวอย่างนี้ เราก็มี instance object ของ Dog list เป็นแบบ แล้วเราก็ทำการ sorting dog ด้วย CompareTo method ของ IComparable Interface


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!