다른 인터페이스의 메서드에서 인터페이스 또는 추상 클래스를 "out"매개 변수로 사용하려면 어떻게해야합니까? 다른 인터페이스에서 out 매개 변수로 인터페이스를 사용할 수 없으면 실제로 메서드를 호출 할 때 해당 인터페이스를 구현하는 클래스를 수락해야합니까?C에서 인터페이스를 "out"매개 변수로 사용
bool을 반환하고 "Response"개체를 채우는 메서드가있는 Transaction 인터페이스가 필요하지만 해당 응답 개체는 Transaction 인터페이스의 모든 구현마다 서로 다른 파생 개체입니다. 미리 감사드립니다.
namespace csharpsandbox
{
class Program
{
static void Main(string[] args)
{
TransactionDerived t = new TransactionDerived();
t.Execute();
}
}
public interface ITransaction
{
bool Validate(out IResponse theResponse);
}
public interface IResponse { }
public class ResponseDerived : IResponse
{
public string message { get; set; }
}
public class TransactionDerived : ITransaction
{
public bool Validate(out IResponse theResponse) {
theResponse = new ResponseDerived();
theResponse.message = "My message";
return true;
}
public void Execute()
{
ResponseDerived myResponse = new ResponseDerived();
if (Validate(out myResponse))
Console.WriteLine(myResponse.message);
}
}
}
이것은 훌륭한 솔루션처럼 보이고 테스트를 거쳐 곧 내가 필요한 것을 수행하는지 확인합니다. 감사합니다! – ARW
나는 각 트랜잭션 구현이 실제로 여러 개의 고유 한 응답을 가질 수 있기 때문에 이것이 제대로 작동하지 않을 것이라는 것을 깨달았습니다 ... 내 최선의 방법은 다음에 던지기가 될까요? – ARW
시스템의 나머지 부분을 보지 않고서는,'as' 연산자를 사용하면 캐스팅이 좀 더 깔끔해질 것입니다.)하는 것이 가장 쉬운 방법입니다. 그러나주의 깊으십시오. 유형을 검사하고 많은 것을 캐스팅해야하는 경우 일반적으로 디자인에 더 큰 문제가 있음을 나타냅니다. – verdesmarald