http://pullthelever.tistory.com/332
- Case 1
class A
{
B b; //당연히 된다.
B.C c; //클래스 B 안에 클래스 C가 public이므로 가능하다.
//public이 아니면 아래와 같은 오류가 나온다.
//오류 CS0122: 보호 수준 때문에 '_namespace.B.C'에 액세스할 수 없습니다.
}
class B
{
public class C//public말고도 private, protected도 가능하다.
{
//...
}
}
- Case 2
class A //기본으로 internal이다.
{
//...
}
public class B//private, protected는 못 오고 internal, public만 올 수 있다.
{
public A a;
// 오류 CS0052: 일관성 없는 액세스 가능성:
// '_namespace.A' 필드 형식이 '_namespace.B.a' 필드보다 액세스하기 어렵습니다.
public A func1() { return a; }
// 오류 CS0050: 일관성 없는 액세스 가능성:
// '_namespace.A' 반환 형식이 '_namespace.B.func1()' 메서드보다 액세스하기 어렵습니다.
public void func2(A a) { this.a = a; }
// 오류 CS0051: 일관성 없는 액세스 가능성:
// '_namespace.A' 매개 변수 형식이 '_namespace.B.func2(_namespace.A)' 메서드보다
// 액세스하기 어렵습니다.
}
- 이유
A는 internal로 외부로 공개되지 않았는데 외부로 공개하는 B에서 A를 외부로 공개하려고 하니 오류가 발생한다.
- Case 2 처방전
첫 번째 방법)
class A 를 public class A로 바꾼다
두 번째 방법)
public class B를 class B로 바꾼다
세 번째 방법)
public A a, public A func1(), public void func2(A a) 를
A a, A func1(), void func2(A a) 로 바꾼다
- public과 internal란
public으로 선언된 경우 다른 어셈블리에서도 접근할 수 있다.
internal으로 선언된 경우 동일한 어셈블리의 파일 내에서만 접근할 수 있다.
아무것도 안 넣으면 internal이다.
'프로그래밍(Programming) > C#' 카테고리의 다른 글
delegate (0) | 2015.08.31 |
---|---|
delegate 위임이란, 간략 사용법 (0) | 2015.08.31 |
[C#]정적 생성자(static constructor) (0) | 2015.08.28 |
생성자 에서 virtual 함수 호출 (0) | 2015.08.27 |
[C#] 상속받은 후 new , override 차이점 예제 (0) | 2015.08.27 |