ความน่ากลัวของ data type แบบ dynamic ใน .net 4.0

ในที่นี้จะกล่าวถึง data type หรือชนิดของข้อมูล ใน  .net (c#)  ปกติเวลาที่เราจะกำหนดชนิดของข้อมูลให้กับตัวแปรเราสามารถกำหนดชนิดข้อมูลให้กับตัวแปรได้เลย เช่น
                int myInt ;
                string myStr;
                double myDo;

                ใน .net 3.0 ได้เพิ่มการกำหนดชนิดของข้อมูลที่ชื่อว่า var ซึ่งในการกำหนดชนิดข้อมูลประเภทนี้จำเป็นจะต้อง assign ค่าให้กับตัวแปรในตอนที่ประกาศเลย  เช่น
                var myvar =2;
                myvar = myvar +2;
                เพราะ var จำเป็นต้องรู้ว่าตัวแปรที่เราประกาศเป็นชนิดข้อมูลประเภทใดในตอน complie time  
                var myvar; // ถ้าประกาศแบบนี้จะ error
                ฉะนั้นเราสามารถใช้ var ในการกำหนดตัวแปรชนิดใดก็ได้เพียงแต่ต้อง assign ค่าให้ในตอนแรกที่ประกาศและมันจะกลายเป็นชนิดข้อมูลชนิดนั้นไปโดยปริยาย 

                นอกจากนี้ยังมีแบบ object ก็เป็นการประกาศตัวแปรอีกแบบหนึ่งซึ่งเป็น class นั้นเองซึ่งเวลาที่เราจะนำตัวแปรนั้นไปใช้จะเป็นจะต้อง convert เป็นชนิดที่เราต้องการเสียก่อน เช่น
                object myobj =10;
ถ้าใช้      myobj = myobj +2; // แบบนี้จะ error
วิธีใช้ที่ถูกต้อง คือ int summyobj = int.pase(myobj.tosting())+2; // แบบนี้ผ่านฉลุย 

                ใน .net  4.0 ได้มีชนิดตัวแปรแบบใหม่ชื่อว่า dynamic  ซึ่งมีความสามารถเป็นชนิดข้อมูลใดๆ ก็ได้ เช่น
                dynamic mydic =10;
                mydic = mydic +2; // แบบนี้ไม่ error
                เพราะ dynamic จะคิดชนิดข้อมูลให้กับตัวแปรตอน runtime (ไม่ได้คิดชนิดข้อมูลตอน compile time)

คราวนี้มาถึงความน่ากลัวแล้ว จะเห็นว่าตอนที่เราประกาศตัวแปรครั้งแรกเราจะยังไม่รู้ชนิดข้อมูลของตัวแปรแต่เราจะมากำหนดอีกที่ตอน runtime จากตัวอย่างก่อนหน้า
ถ้าให้     mydic =”myname”; // ซึ่งเปลี่ยนชนิดข้อมูลให้กับตัวแปรจาก int เป็น string 
แล้วเผลอกลับมาใช้ชนิดข้อมูลก่อนหน้า (int) แล้วจะเกิดอะไรขึ้นถ้า
                mydic  = mydic +1; // แบบนี้ error แน่นอน 
                เพราะ dynamic สามารถกำหนดชนิดข้อมูลในขณะ runtime 

ดังนั้นเวลาที่จะเลือกใช้ชนิดข้อมูลให้กับตัวแปรจำเป็นต้องคิดให้ดี ๆ ก่อนลงมือครับ ... 

แสดงความคิดเห็น