다중 상속이 나쁘기 때문에 (소스가 더 복잡 해짐) C #은 이러한 패턴을 직접 제공하지 않습니다. 그러나 때때로이 능력을 갖는 것이 도움이 될 것입니다.
예를 들어 인터페이스와 세 가지 클래스를 사용하여 누락 된 다중 상속 패턴을 구현할 수 있습니다.
public interface IFirst { void FirstMethod(); }
public interface ISecond { void SecondMethod(); }
public class First:IFirst
{
public void FirstMethod() { Console.WriteLine("First"); }
}
public class Second:ISecond
{
public void SecondMethod() { Console.WriteLine("Second"); }
}
public class FirstAndSecond: IFirst, ISecond
{
First first = new First();
Second second = new Second();
public void FirstMethod() { first.FirstMethod(); }
public void SecondMethod() { second.SecondMethod(); }
}
인터페이스 중 하나에 메소드를 추가 할 때마다 FirstAndSecond 클래스도 변경해야합니다 .
C ++에서 가능한 것처럼 여러 개의 기존 클래스를 하나의 새 클래스에 삽입하는 방법이 있습니까?
어쩌면 어떤 종류의 코드 생성을 사용하는 솔루션이 있습니까?
또는 다음과 같이 보일 수 있습니다 (상상적인 C # 구문).
public class FirstAndSecond: IFirst from First, ISecond from Second
{ }
따라서 인터페이스 중 하나를 수정할 때 FirstAndSecond 클래스를 업데이트 할 필요가 없습니다.
편집하다
실제적인 예를 고려하는 것이 좋습니다.
프로젝트 내부의 다른 위치에서 이미 사용중인 기존 클래스 (예 : ITextTcpClient 기반의 텍스트 기반 TCP 클라이언트)가 있습니다. 이제 Windows 양식 개발자가 쉽게 액세스 할 수 있도록 클래스 구성 요소를 작성해야합니다.
내가 아는 한 현재 두 가지 방법이 있습니다.
컴포넌트에서 상속 된 새 클래스를 작성하고 FirstAndSecond에 표시된대로 클래스 자체의 인스턴스를 사용하여 TextTcpClient 클래스의 인터페이스를 구현하십시오.
TextTcpClient에서 상속하고 어떻게 든 IComponent를 구현하는 새 클래스를 작성하십시오 (실제로는 아직 시도하지 않았습니다).
두 경우 모두 클래스별로가 아니라 메서드별로 작업해야합니다. TextTcpClient 및 Component의 모든 메소드가 필요하다는 것을 알고 있으므로이 두 가지를 하나의 클래스로 결합하는 것이 가장 쉬운 솔루션입니다.
충돌을 피하기 위해 나중에 코드를 생성하여 결과를 변경할 수 있지만 직접 입력하면 엉덩이에 통증이 생깁니다.