2011-10-22 2 views
5

3 계층 응용 프로그램이 있고 P1, P2, P3이라는 세 개의 프로젝트가 있다고 가정 해 보겠습니다.C# 참조 종속성이 VB와 다른가요?

의존성 : P1 (데이터) < < P2 (비즈니스 로직) < < P3 (프레젠테이션)

P2는 P2의 Y 타 클래스 에 상속 된 기본 클래스 X를 가지고

. 그래서 우리는 ref P1을 P2에 추가합니다. 그러나 P3는 P2를 사용합니다. Y이며 P1은 사용하지 않습니다. X.

이렇게하려면 P3에 ref P2를 추가해야합니다. 그러나 VB와 C# 사이에 차이가 있습니다.

VB에서 ref P2 만 P3에 추가합니다. P2는 P1을 사용하지만 P3은 중요하지 않습니다. 은 P1을 P3에 추가 할 필요가 없습니다. 이 정도면 충분합니다!

하지만, C#을에, 우리는 P3는을 P1.x를 사용하지 않는 경우에도 P3
에 심판 P1과 P2를 모두 추가해야합니다. C에 ref A를 추가하지 않으면 아래 오류가 표시됩니다.

'P1.X'유형이 참조되지 않은 조립품에 정의되어 있습니다. 어셈블리 'P1, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null'에 대한 참조를 추가해야합니다.

왜 C#에서 두 개의 프로젝트를 추가해야합니까?

대신이 동작을 차단할 수 있습니까?

답변

1

가능한 이유는 P2가 형식이 P1에 정의 된 멤버를 공개적으로 노출하기 때문입니다. 이 경우 P1은 P3에서 명시 적으로 사용하지 않아도 P3에서도 참조되어야합니다.

예 : 위의 코드에서

// Assembly P1 
public class C1 
{ 
    ... 
} 

// Assembly P2 
public class C2 
{ 
    public string Foo { get; set; } 
    public C1 Bar { get; set; } 
} 

// Assembly P3 
void Main() 
{ 
    C2 c = ... 
    Console.WriteLine(c.Foo); 
} 

는 P3가 (P2에 정의 됨) C2를 사용하고, P3은 P1 을 (경우에도 참조해야하므로 C2는, (P1에서 정의) 형 C1의 부재를 노출 C2.Bar) 을 사용하지 않습니다.


편집 : 실제로 내가 잘못했다 : 당신이 C2.Bar을 참조 않은 경우에만 당신은 P1을 참조해야합니다 ... 동작은 C#에서 같은 VB에서 동일, 난 그냥 시도이다 (당신은 추가하지 않는 경우 P1에 대한 참조는 this error입니다.) 이전에 VB 프로젝트에서이 제약 조건을 갖지 않았다면 P3가 P1에 의존하는 것을 사용하지 않았기 때문입니다.

+0

VB.NET/C# 구별에 대한 설명이 있습니까? –

+0

@Kirk, 아니요 ... –

+1

예, C#에서 P1 참조를 P3에 추가해야한다고 했으므로 하지만 VB에서는 추가 할 필요가 없습니다. 이것은 내가 물어 본 질문입니다 ... –