2
제네릭을 도입하여 일부 코드를 리팩토링하려고하는데 막혔습니다. 나는 T의 새로운 인스턴스를 만들려고하는데 문제는 T가 생성자에 델리게이트 인수를 가지고 있다는 것이다. 단지 [객체] 유형이 [액티베이터]의 인수로 사용할 수 있습니다로,대리자를 사용하여 일반 인스턴스 만들기
public delegate IOrders DoStuffDelegate();
public class GenericBoss<T> where T:Worker
{
public void DelegateWork()
{
T worker = Activator.CreateInstance(typeof(T), new[]{GiveOrders})
worker.Work();
}
public IOrders GiveOrders()
{
return new OrderFromTheBoss();
}
}
public class Worker
{
private readonly DoStuffDelegate _takeOrders;
public Worker(DoStuffDelegate takeOrders)
{
_takeOrders = takeOrders;
}
public void Work()
{
_takeOrders();
}
}
그러나이 작동하지 않습니다 내가 무엇을 목표로 한 것은이 같은했다. 나는 생성자를 변경할 수 없기 때문에 대리자를 다른 곳으로 옮길 수는 없다.
탈출구가 있습니까? 아니면 제네릭이 옵션이 아닙니까?
안부, 모르 텐
'Activator.CreateInstance'가이 경우 객체를 반환한다고 생각하십니까? 'as'형 또는 일반형이 있어야합니다. 적용됨. –
@ 대니 : 예, 캐스트가 필요할 것입니다. 추가 할 것입니다. 나는 OP의 원래 문제라고 생각하는 것들에 대한 논쟁 측면에 초점을 맞추고있었습니다 :) –
예, T로 다시 캐스팅해야했지만 그 때 그것은 작동했다. 고맙습니다. 방금 내 코드를 훨씬 더 예쁘게 만들었습니다. o) – Morten