เพิ่งเริ่มหัดเขียนโปรแกรม 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
[java/C#] ทำไมตอนประกาศตัวแปร Class Dictionary ถึงใช้ IDictionary แทน
ทำไมถึงไม่ใช้
ทั้งที่การประกาศทั้งสองแบบก็สามารถใช้งาน Dictionary Class ได้เหมือนกัน พยายามลองหาเหตุผลจาก google แล้ว คำตอบที่ได้ไม่ค่อยชัดเจนเท่าไหร่
คำตอบที่พบเช่น
- หากมีการแก้ไข code ในอนาคต ในกรณีที่ต้องการใช้ Class ในกลุ่มเดียวกัน สามารถทำได้ง่ายกว่า
- บางคนบอกให้เลือกตามความเป็น generic มากกว่ากัน
- สามารถ casting ไป Interface หรือ Class ในกลุ่มเดียวกันได้ง่ายกว่า
สรุปว่ามันจำเป็นไหมครับ? ถ้ามันจำเป็นหรือมีข้อดีอื่น ๆ รบกวนช่วยอธิบายหรือตัวอย่าง code ที่จำเป็นต่อการใช้งานแบบนี้ ถ้ามันดีกว่าจริง แล้วเราจะรู้ได้อย่างไรว่า Class ไหนควรประกาศตัวแปรด้วย Interface แทนการใช้ Class ประกาศตรง ๆ ครับ
ผมลองเขียนโปรแกรม casting ดูมันก็สามารถทำได้อยู่แล้วเลยยิ่งสงสัยว่าจะทำไปทำไม
{
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);
}
}
}
"b" => 2000
Casting to IDictionary.
"a" => 1000
"b" => 2000