VB6
Variant
(真不敢相信我找到了那个链接!)翻译c#
dynamic
。
public dynamic RunReturningVar(
string vstrSql,
bool connval = false,
double copyID = 0,
bool corpVal = false,
int vintConnectionTimeout = 30)
{
// do your stuff here
}
几乎可以转化为
object
但是
变种
是特定于的数据类型
后期绑定,它可以保存引用类型和值类型-与c不同#
对象
只能通过装箱来保存值类型。
请注意,使用
动态
意味着您绕过了所有编译时类型检查,这可能会导致c#程序通常不会出现的运行时错误。
或许可以更好地使用泛型,但这需要您从调用方法中指定返回类型:
public T RunReturningVar<T>(
string vstrSql,
bool connval = false,
double copyID = 0,
bool corpVal = false,
int vintConnectionTimeout = 30) where T : new()
{
// do your stuff here and return T
}
另外,对于公共类中的公共方法,我会
强烈建议不要使用可选参数
在c#中。
使用方法重载指定默认值。
原因是可选参数在c#中的工作方式:
当调用带有可选参数的方法时,如果省略了可选参数,则会将其默认值编译到方法调用中。
因此,如果您从另一个程序集调用此方法,则忽略一些可选参数-如下所示:
yourObjectReference.RunReturningVar(sql, true);
c编译器实际上将其转换为:
yourObjectReference.RunReturningVar(sql, true, 0, false, 30);
这意味着,如果要更改任何参数的默认值,也应重新编译引用此参数的其他程序集。
因此,更好的选择是使用方法重载:
public dynamic RunReturningVar(
string vstrSql,
bool connval,
double copyID,
bool corpVal,
int vintConnectionTimeout)
{
// do your stuff here
}
public dynamic RunReturningVar(
string vstrSql,
bool connval,
double copyID,
bool corpVal
)
{
return RunReturningVar(vstrSql, connval, copyID, corpVal, 30);
}
public dynamic RunReturningVar(
string vstrSql,
bool connval,
double copyID,
)
{
return RunReturningVar(vstrSql, connval, copyID, false);
}
等等