본문 바로가기
프로그래밍/C#.net

은폐

by 건우아빠유리남편 2009. 8. 24.
반응형

악세스레벨(Accessibility Level)

 악세스레벌

 설명

 public  어디서든지 악세스가능
 protected  class내부와 파생class내부에서만 악세스가능
 internal  동일project내의 class에서만 악세스가능
 protected internal  동일project내의 class내부와 파생class내부에서 악세스가능
 private  class내부에서만 악세스가능

 

예를 들어

class A

{

  public int pub;

  protected int pro;

  private int pri;

  public void function1()
  {
    // class 내부
    pub = 1; // OK
    pro = 2; // OK
    pri = 3;  // OK
  }

}

 

class B : A
{
  public void function2()
  {
    // 파생class내부
    pub = 1; // OK
    pro = 2; // OK
    pri = 3;  // 에러
  }
}

class AccessibilitySample
{
  public static void Main()
  {
    A a = new A();
    //class a의 외부
    a.pub = 1; // OK
    a.pro = 2; // 에러

    a.pri = 3;  // 에러
  }
}

은폐

멤버변수는 class외부에서 직접 악세스되지 않게 해서, 오브젝트상태의 변화를 전부 메소드를 통해서 해야된다는 것을 의미한다.

- 오브젝트의 잘못된 바꿔쓰기를 방지하는 것.

- 클래스의 실제내용을 변경했 때, 이용하는 쪽의 코드변경을 없애는 것

 

예를 들어

class Person
{
  public string name; // 이름
  public int age;       //  나이

  public Person()
  {
    this.name = "";
    this.age  = 0;
  }

  public Person(string name, int age)
  {
    this.name = name;
    this.age  = age > 0 ? age : 0; // age 에 0보다 작은수가 들어가면, 0으로 하는 처리.
  }
}
그러나, 위의 클래스에 외부에서 Person클래스의 멤버age를 바꿔쓰기를 통해서 음수로 되는것을 막을 방법은 없다.

예를 들면,

Person p = new Person("이호리", -18); // 나이를 음수로 넣음.

Console.Write("{0}は{1}입니다.。\n", p.name, p.age); // 이호리는 -18입니다.로 표시된다.ㅠㅠ;;

 

이문제를 해결하기 위해서는 멤버변수age를 외부에서 직접악세스 할 수 없게해서,메소드를 통해서 age의 값을 설정, 취득할 필요가 있다.

예를 들면,

 

class Person
{


  public string name; // 이름
  private int age;      // 나이

  public Person()
  {
    this.name = "";
    this.age  = 0;
  }

  public Person(string name, int age)
  {
    this.name = name;
    SetAge(age);
  }

  public int GetAge()
  {
    return this.age;
  }

  public void SetAge(int age)
  {
    this.age  = age > 0 ? age : 0; // age 에 0보다 작은수가 들어가면, 0으로 하는 처리.
  }


}

 

참조

http://ufcpp.net/study/csharp/oo_conceal.html

[출처] 은폐|작성자 롱박

반응형

'프로그래밍 > C#.net' 카테고리의 다른 글

정적변수,정적메소드  (0) 2009.08.24
프로퍼티  (0) 2009.08.24
Constructor  (0) 2009.08.24
클래스  (0) 2009.08.24
작업표시줄에 App 숨기는 꽁수  (0) 2009.03.24

댓글