저는 C# 초보자입니다. 그러니 나와 함께하시기 바랍니다.다른 어셈블리의 내부 인터페이스에서 파생되는 방법
OK, 그래서 서로를 참조 할 필요가 다른 어셈블리에 두 개의 클래스가 있습니다
namespace AssemblyA
{
class A
{
private B MyB { get; set; }
}
}
namespace AssemblyB
{
class B
{
private A MyA { get; set; }
}
}
나는 내가 인터페이스를 사용하고, 순환 참조는 허용되지 않습니다 이해 :
namespace AssemblyA
{
public interface IB
{
// whatever 'A' needs of 'B'
}
class A
{
private IB MyB { get; set; }
}
}
namespace AssemblyB
{
class B : AssemblyA.IB
{
private A MyA { get; set; }
}
}
을
이 방법이 효과적이지만 다른 나라에 IB
이 노출된다는 단점이 있습니다. 대신 내가하고 싶은 것은 IB
internal
입니다. 하지만 B
은 그걸 파생시킬 수 없습니다.
C++의 경우 B
을 친구로 지정하면됩니다. 나는 C#이 친구가 없다는 것을 이해한다 (말장난은 아니지만 언급 됨). 그래서 나는하지 않고해야한다. 거기에 속성이 있다는 것을 읽었지만 어셈블리의 전체가 A
어셈블리 전체에 액세스 할 수있게합니다. B
은 좋지 않습니다. 피할 수있는 방법이 있습니까?
존, 이것을 고려했습니다. 이 구문상의 문제를 회피하기 위해 어셈블리를 추가해야하는 것은 나에게 불행한 것 같습니다. 어쨌든, 당신이 실제로 내 질문을 읽고 제안을 한 첫 번째 사람이기 때문에 나는 이것을 투표했습니다. – sbi
나는 아직도 물어볼 것입니다 - B 건물은 누구이며, 왜이 건물에 접근 할 수 있다면 다른 사람들에게 접근 할 수 없도록 만드는 것이 왜 그렇게 중요합니까? 기본적으로 아무 것도 발생하지 않습니다. 해당 개발자는 수동으로 해당 멤버를 호출해야합니다. (즉, 내 답변보다 다른 답변에 동의합니다 :)) –
두 어셈블리가 모두 사내입니다. 하지만 그다지 중요하지 않습니다. 수년에 걸쳐 나는 캡슐화가 미덕이라는 것을 알게되었습니다. 나는 컴파일 타임 *에서 최대한 빨리 모든 것을 강화하고 싶다. 위의 디자인이 이상한 것으로 생각하지 않으며 C#에서이 문제를 해결할 수 없다는 사실에 놀랐습니다. – sbi