C # Generics: Если T является возвращаемым типом, может ли он также быть недействительным? Как я могу объединить эти интерфейсы вместе?

У меня есть следующий интерфейс, который возвращает универсальный параметр типа T с помощью обратного вызова ...

public interface IDoWork<T>
{
    T DoWork();
}

однако у меня также есть следующий интерфейс, но он не будет вызывать обратный вызов, так как он возвращает void.

public interface IDoWork
{
    void DoWork();
}

Могу ли я объединить эти два интерфейса и использовать логику времени выполнения, чтобы определить разницу? Как я могу это сделать?

 Thomas Levesque18 мая 2012 г., 01:14
@ChrisCashwell, потому что .NET-дженерики встроены в CLR, тогда как в Java это всего лишь трюк компилятора (JVM ничего не знает о дженериках во время выполнения). Хотя это обычно является преимуществом обобщений .NET, это также означает, что правила более строгие ...
 Thomas Levesque18 мая 2012 г., 01:20
@ makerofthings7, см.this question
 random6553718 мая 2012 г., 01:17
@ThomasLevesque Где я могу узнать больше о том, как подход .NET является преимуществом перед Java?
 random6553718 мая 2012 г., 01:23
Спасибо @ThomasLevesque; Версия TL; DR. Преимущества обобщений C # перед Java заключаются в улучшении производительности, глубокой проверке безопасности типов и отражении
 Chris Cashwell18 мая 2012 г., 01:02
Жаль, что вы не на земле Java, так как вы были бы полностью способны сделать что-то вродеIDoWork<Void> ..., Я немного удивлен, что C # не предлагает такую вещь.

Ответы на вопрос(2)

поэтому T DoWork () и void DoWork () различаются, и void не является типом и не являетсяnull, Это признак того, что в стеке оценки ничего нет при возврате из метода.

 10 апр. 2015 г., 12:42
В C # возвращаемый тип не является частьюmethod signature
Решение Вопроса

Вы можете видеть это в рамках - вот почему существует отдельныйTask а такжеTask<T> класс, например.

Тем не менее, вы часто можете поделиться реализациями в этом типе сценария с помощьюIDoWork<object> и прохождениеnull для ценностей и т. д.

 18 мая 2012 г., 00:49
@ makerofthings7 Вы ~ могли бы ~ - но это может быть неуместно, если значение null является ожидаемым или действительным значением ..
 18 мая 2012 г., 01:03
@ShaunWilde Я бы тоже - у меня было два отдельных интерфейса в этом типе сценария, поскольку они действительно очень разные.
 random6553718 мая 2012 г., 00:48
Интересно, если T == object и object == null в реализации, тогда я могу пропустить обратный вызов в хосте. Это звучит разумно?
 18 мая 2012 г., 00:50
Лично, поскольку их поведение отличается, я бы хотел дать им немного другие имена, чтобы выразить эту разницу.

Ваш ответ на вопрос