C# Generics: If T is a return type, can it also be void? How can I combine these interfaces together?

六眼飞鱼酱① 提交于 2019-11-30 00:27:47

问题


I have the following interface that returns the generic parameter of type T using a callback...

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

however I also have the following interface as well, but it won't invoke a callback since it returns void.

public interface IDoWork
{
    void DoWork();
}

Can I combine these two interfaces and use runtime logic to determine the difference? How can I do that?


回答1:


Unfortunately, they can't be combined.

You can see this in the framework - that's why there is a separate Task and Task<T> class, for example.

That being said, you can often share implementations in this type of scenario by using IDoWork<object> and passing null for values, etc.




回答2:


return type is a part of method signature, so T DoWork() and void DoWork() are different, and void is not a type and it is not a null. It is an indication there is nothing in evaluation stack on return from method.



来源:https://stackoverflow.com/questions/10644495/c-sharp-generics-if-t-is-a-return-type-can-it-also-be-void-how-can-i-combine

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!