Part1 -> Section2 -> Classes -> 005. Visibility

     Visibility หรือ Accessibility คือ สิ่งที่กำหนดการเข้าถึงหรือเรียกใช้งานตัวแปรหรือ method ซึ่งโดยทั่วไปแล้วจะมีตัวที่ใช้บ่อยๆอยู่แค่ private และ public แต่เราลองมาดูตัวที่เหลือกันดีกว่าว่าจะมีตัวไหนบ้าง

public สามารถเข้าถึงได้จากทุกๆที่

protected สามารถเข้าถึงได้จาก class เดียวกัน หรือจาก inherit class เท่านั้น

internal สามารถเข้าถึงได้จาก project เดียวกันเท่านั้น

protected internal จะเหมือนกันกับ internal  แต่ต่างที่ inherit class สามารถเข้าถึงได้แม้จะอยู่คนละ project ก็ตาม

private จะเข้าถึงได้เฉพาะใน class เดียวกันเท่านั้น ( class และ struct หากไม่ระบุ visibility จะ default เป็น private )

     ลองดูตัวอย่างการใช้งาน visibility


public class Class1
    {
        private double var1;
        public string var2;

        private void Method1()
        {
            // Do some thing
        }

        public double Method2()
        {
            Method1();
            return var1;
        }
    }

    public class Class2
    {
        Class1 c1 = new Class1();
        
        public void CallClass1()
        {
            c1.var1 = 2000000; // Error: var1 is inaccessible due to its protection level
            c1.var2 = "yyy";

            c1.Method1(); // Error: Method1() is inaccessible due to its protection level
            c1.Method2();
        }
    }

     จากตัวอย่างเป็นการใช้งาน visibility แบบ public และ private โดยที่ Class2 จะเรียกใช้งาน instace และ method จาก Class1 สังเกตุว่า หากประกาศ public จะสามารถเรียกใช้งานได้โดยปกติ แต่หากตัวใดถูกประกาศเป็น private แล้วนั้น Error จะบังเกิดขึ้นทันใด ทางแก้ไขคือ ให้เรียก Method2 เป็นตัวช่วยเรียกใช้งานสมาชิกที่เป็น private เพราะ Class2 ไม่สามารถเรียกใช้งานตรงๆได้นั่นเอง
     ข้อสังเกตุอีกอย่างคือ Class1 ถูกประกาศให้เป็น public เพราะหากปล่อยเป็น class Class1 {} แล้วนั้น มันจะ default ให้เท่ากับ private class Class1 {} ซึ่ง Class2 จะทำแค่ new object ของ Class1 นั้นยังทำไม่ได้เลย จบข่าวเลย เรียกใช้งาน Class1 ไม่ได้เลย
     บทสรุปของ visibility นั้น บางคนอาจมีคำถามว่าทำไมต้องใช้ด้วย นั่นก็เพราะเหตุผลของเรื่องความปลอดภัยนะครัช อย่างเช่นถ้า ตัวแปร var1 เป็นเงินเดือน แล้วเราต้องเขียน class ให้คนอื่นมาเรียกใช้ เราคงไม่อยากให้คนอื่นมาเปลี่ยนแปลงเงินเดือนใช่ไหม เราจึงต้องกำหนด var1 เป็น private แล้วค่อยเขียน method ที่เป็น public แล้ว return ค่า var1 ไป คนอื่นดึงไปดูได้ แต่ไม่สามารถแกไข var1 ได้ เห็นไหมคับ มันมีประโยชน์นะ แต่ก็ต้องระวังเช่นกัน หากกำหนด visibility ต่ำเกินไป ก็อาจทำให้เกิด Error ได้เช่นกัน

สอบถามหรือติดตามได้ที่ https://www.facebook.com/learnaspnetmvcjquery

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

Part2 -> Section1 The Basic -> 003. MVC Folder Structure

Part2 -> Section1 The Basic -> 001. Introduction

Part2 -> Section1 The Basic -> 005. Controller