■악세스레벨(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으로 하는 처리.
}
}
참조
'프로그래밍 > C#.net' 카테고리의 다른 글
정적변수,정적메소드 (0) | 2009.08.24 |
---|---|
프로퍼티 (0) | 2009.08.24 |
Constructor (0) | 2009.08.24 |
클래스 (0) | 2009.08.24 |
작업표시줄에 App 숨기는 꽁수 (0) | 2009.03.24 |
댓글