나는 간단한 일반적인 위임이 있습니다키워드는 제네릭 형식으로 현재의 객체를 참조하는
public abstract class CommandBase
{
public CommandBase()
{ }
public void ExecuteAsync<TCommand>(CommandFinishedCallback<TCommand> callback)
where TCommand : CommandBase
{
// Async stuff happens here
callback.Invoke(this as TCommand);
}
}
이 작업을 수행하는 동안, 나는이 :
delegate void CommandFinishedCallback<TCommand>(TCommand command)
where TCommand : CommandBase;
나는 다음과 같은 추상 클래스에서 사용을 TCommand를 Execute에 전달하여 현재 객체의 유형 (더 파생 된 CommandBase)으로 강제 할 방법이 없습니다.
public abstract class CommandBase<TCommand>
where TCommand : CommandBase<TCommand>
{
// class goes here
}
을하지만 그 달성을위한 C#을 키워드가없는 이유가 궁금하네요 :
나는이 일을 해결 봤어요? 내가보고 싶어하는 것은 다음과 같습니다 :
public void ExecuteAsync<TCommand>(CommandFinishedCallback<TCommand> callback)
where TCommand : This
{
// Async stuff happens here
callback.Invoke(this);
}
"This"에 대문자 T가 있음을 유의하십시오. 나는 결코 언어 디자이너가 아니지만 나는 점심을 먹으려 고하지 않을지 궁금합니다. 이것이 CLR이 처리 할 수있는 것이겠습니까?
이미 문제를 해결하기위한 패턴이 있습니까?
GitHub의 Roslyn 팀에게이 거의 정확한 기능에 대한 제안 요청을 추가했습니다. 그것을 여기에서 조사해라 : https://github.com/dotnet/roslyn/issues/4332 –