[java/C#] ทำไมตอนประกาศตัวแปร Class Dictionary ถึงใช้ IDictionary แทน

กระทู้คำถาม
เพิ่งเริ่มหัดเขียนโปรแกรม OOP อ่านหนังสือแล้วเจอตอนใช้ Dictionary ตอนประกาศตัวแปรกลับใช้ IDictionary แทน

IDictionary<string, MyClass> dictionary = new Dictionary<string, MyClass>();

ทำไมถึงไม่ใช้

Dictionary<string, MyClass> dictionary = new Dictionary<string, MyClass>();

ทั้งที่การประกาศทั้งสองแบบก็สามารถใช้งาน Dictionary Class ได้เหมือนกัน พยายามลองหาเหตุผลจาก google แล้ว คำตอบที่ได้ไม่ค่อยชัดเจนเท่าไหร่

คำตอบที่พบเช่น
- หากมีการแก้ไข code ในอนาคต ในกรณีที่ต้องการใช้ Class ในกลุ่มเดียวกัน สามารถทำได้ง่ายกว่า
- บางคนบอกให้เลือกตามความเป็น generic มากกว่ากัน
- สามารถ casting ไป Interface หรือ Class ในกลุ่มเดียวกันได้ง่ายกว่า

สรุปว่ามันจำเป็นไหมครับ? ถ้ามันจำเป็นหรือมีข้อดีอื่น ๆ รบกวนช่วยอธิบายหรือตัวอย่าง code ที่จำเป็นต่อการใช้งานแบบนี้ ถ้ามันดีกว่าจริง แล้วเราจะรู้ได้อย่างไรว่า Class ไหนควรประกาศตัวแปรด้วย Interface แทนการใช้ Class ประกาศตรง ๆ ครับ

ผมลองเขียนโปรแกรม casting ดูมันก็สามารถทำได้อยู่แล้วเลยยิ่งสงสัยว่าจะทำไปทำไม

class Program
{
    static void Main(string[] args)
    {
        Dictionary<string, int> myVar = new Dictionary();

        myVar.Add("a", 1000);
        myVar.Add("b", 2000);

        foreach(KeyValuePair<string, int> x in myVar)
        {
            Console.WriteLine("\"{0}\" => {1}", x.Key, x.Value);
        }

        Console.WriteLine("Casting to IDictionary.");

        IDictionary<string, int> testVar = (IDictionary<string, int>)myVar;

        foreach (KeyValuePair<string, int> x in testVar)
        {
            Console.WriteLine("\"{0}\" => {1}", x.Key, x.Value);
        }
    }
}
output:


"a" => 1000
"b" => 2000
Casting to IDictionary.
"a" => 1000
"b" => 2000
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่