Есть у меня некоторый обобщённый класс, который делает Request и отдаёт Response:
public class WebService
{
public TResponse Call<TRequest, TResponse>(TRequest request)
where TRequest : RequestBase
where TResponse : ResponseBase
{
...
}
}
public class ResponseBase
{
public int RemoteStatus { get; set; }
public bool Success
{
get { return this.RemoteStatus == SuccessStatusCode; }
}
public bool Fail
{
get { return this.RemoteStatus == FailedStatusCode; }
}
private const int SuccessStatusCode = 0;
private const int FailedStatusCode = -1;
}
И при одном из рефакторингов я решил использовать имевшийся фабричный метод:
public static ResponseBase Failed()
{
return new ResponseBase { RemoteStatus = FailedStatusCode };
}
И хотя такой код скомпилировался:
return (TResponse)ResponseBase.Failed();
но в рантайме упал с ошибкой приведения типа:
InvalidCastException: Не удалось привести тип объекта "ResponseBase" к типу "Response".
И я вот задумался: как наиболее простым способом у типа TResponse вызвать статический метод (добавлено: и как это будет соотноситься с отсутствием ограничения new()
)?
Я немного покопался с рефлексией (typeof(TResponse).GetType().GetMethods(BindingFlags.Static)
), но оказалось что в рантайме информация о том, что TResponse = ResponseBase куда-то потерялась, уже typeof(TResponse)
выдаёт
И добраться до .Failed() для того, чтобы дёрнуть MethodInfo.Invoke
не получается.
Или это вообще тупиковое направление и я странного хочу? Я на текущий момент бросил эти попытки, добавив в ограничения , new()
и прямо создав экземпляр класса TResponse -- но чисто академический интерес остался.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как добавить namespace TestApp, TestAppController, TestApp
Есть веб приложение на PHP + БД на MySQLПосле выполнения какого-либо SQL запроса путем отправки данных через HTML форму, если обновить страницу, то SQL запрос...
Есть многофайловая загрузка изображений, но в БД создается только одна строка!