protect

ถ้าเอาบทความไปเผยแพร่แล้วไม่ให้เครดิต ดำเนินคดีด้วย พรบ. คอมพิวเตอร์ฉบับใหม่ ขั้นสูงสุดและไม่ยอมความครับ

วันอังคารที่ 15 กันยายน พ.ศ. 2558

รู้จักกับ CLS ตอนที่ 2


บทความนี้มีการ reference มาจาก CLS Compliance ของ MSDN

เนื่องจาก CLS ของ Microsoft เป็นมาตรฐานสำหรับการพัฒนา software หรือ library เพื่อให้นักพัฒนาท่านอื่นสามารถนำไปใช้งานได้ ระหว่างที่เรากำลังพัฒนา library เราสามารถให้ compiler ตรวจสอบ code ที่เราเขียนขึ้นว่ารอบรับ CLS-compliant หรือไม่ ด้วยการระบุใน assembly ตามตัวอย่าง code ข้างล่าง

using System;

[assembly:CLSCompliant(true)]

namespace CLS
{
   
    public class Person
    {
        public Person()
        {

        }

        public Int32 Age
        {
            get { return 0; }
        }
    }
}



ถ้าเราเขียนโปรแกรมด้วย Visual Studio เราควรนำ [assembly:CLSCompliant(true)] ไปไว้ใน file AssemblyInfo.cs ภายใต้ folder Properties แต่ต้องจำไว้ว่า CLSCompliant เป็น member ของ namespace System จึงต้องมั่นใจว่าที่ file AssemblyInfo.cs มีการ using System; น่ะครับ

สำหรับตัวอย่าง code ข้างบนผมนำเอา [assembly:CLSCompliant(true)] มาไว้ที่ main code

จาก code เมื่อทำการ compile เราจะไม่ได้ warning message แต่ถ้าเปลี่ยน return type ของ property Age จาก Int32 เป็น UInt 16 ดัง code ข้างล่าง

        public UInt16 Age
        {
            get { return 0; }
        }


compiler สามารถ compile code และสร้าง manage file สำเร็จแต่ compiler จะ report warning message "Type of 'CLS-Person.Age' is not CLS-compliant" ตัวอย่างรูปข้างล่างน่ะครับ




สำหรับตัวอย่างนี้สาเหตุที่ไม่เป็น CLS-compliant เป็นเพราะว่าไม่ใช่ทุกภาษาที่จะรองรับ type UInt16 โดยเฉพาะภาษา VB.Net ดังนั้นถ้า class นี้ถูกนำไปใช้กับภาษา VB.Net ตัว property Age อาจจะใช้งานได้ไม่ถูกต้อง

แต่ถ้าเรามั่นใจว่า property Age สามารถใช้ได้กับทุกภาษาและต้องการ by pass การเช็ค CLS-compliant เฉพาะ property Age เราสามารถเขียน code ได้ดังนี้

                    [CLSCompliant(false)]
        public UInt16 Age
        {
            get { return 0; }
        }



แค่นี้เราก็สามารถ compile code โดยที่ไม่มี warning messageแล้วครับ แต่ไม่ควรทำน่ะ

พบกันใหม่ตอนหน้าตอนที่ 3 ครับ
TuChay


ไม่มีความคิดเห็น:

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