我有一些常见的功能:
class MyBaseClass<TOut>
{
public abstract TOut MyFunc<TOut>();
}
和特定的实现
class MyDerivedClass : MyBaseClass<string>
{
public override string MyFunc<string>()
{
string strSomeThing;
... initialization of strSomeThing;
return strSomeThing;
}
}
和几个类似的派生类。
(对通用类型没有任何限制)。
今天,当我需要'MyFunc'来做一些操作时(比如说在DB中保存数据)并且不需要返回任何有意义的内容时,我就有了这种情况......
对于这种情况,我想将'void'作为类型参数......
我尝试这样做,编译器回答:
不能使用'void'作为类型参数。
您能告诉我,我案件的最佳解决方案是什么?
只需使用'Object'作为参数类型并在函数中返回null?
还有更好的东西吗?
非常感谢!
答案 0 :(得分:1)
标准做法是为这种情况创建一个单独的非泛型类型。
编辑:例如:
class MyBaseClass
{
public abstract void MyFunc();
}
根据您使用它们的方式,您可能希望让它们共享一个接口或基类。
答案 1 :(得分:0)
你可以输入一个“_void”来短整行或类似的东西,并将其用于可读性目的。 (并且只返回0)。
答案 2 :(得分:0)
这是一种巨大的气味。无论发生了什么,你都定义了一个泛型类,它有一个返回对象的方法,你希望从该类派生而不返回任何东西,这表明某些东西是非常错误的。这个方法很可能在各种重载中做了一些不同的事情(一些重载正在保存到数据库,一些重载正在向打印机发送一个作业,一些重载正在构建一个对象,或者其他什么),这是糟糕的设计。 / p>
请详细说明您的使用案例,但我的直觉是,重新设计是解决您问题的最佳方案(“Doc,当我这样做时会很痛。”“然后停止这样做。”)