在.NET 中针对已有的存储过程创建封装函数是相当困难的一件事。存储过程有特定的调用约定,这些约定在.NET Framework 中并不常用。它们包含以下内容:
- Pass by Reference Parameters
- Output Parameters
- Optional Parameters with default values
- All parameters are nullable
- 用引用参数传递值
- 输出参数
- 带默认值的可选参数
- 所有参数都是可空的
目前为止,完全映射并不可行。C#当前并不支持可选参数,只是针对所缺的参数使用占位符。VB 能够处理可选参数,但不能处理那些为空值的参数。例如,你不可以这样编写代码:
<span>Function </span>FindCustomer(<span>Optional ByVal </span>firstName <span>As String </span>= <span>Nothing</span>, _ <span>Optional ByVal </span>lastName <span>As String </span>= <span>Nothing</span>, _ <span>Optional ByVal </span>zipCode <span>As Integer</span>? = <span>Nothing</span>) <span>As </span>DataTable
在调用带有多个可选参数的搜索式存储过程时,这是一个需要重点关注的问题。使用 C# 4 和 VB 10,最后的漏洞已经解决。C#现在支持可选值,两种语言在和可空结构打交道的时候,都可以使用可选类型。
特性
C#
映射
VB
映射
F#
映射
用引用参数传递值
1
ref type [param]
7
ByRef [param] As [type]
4
[param] : [type] byref
输出类型
1
out type [param]
7
ByRef [param] As [type]
4
[param] : [type] byref
可选字符串
4
string param = [default]
7
Optional [param] As String = [default]
N/A
4
Normal functions do not support optional parameters.
一般函数不支持可选参数
Method functions use: ?[param] : [type]
方法函数用:?[param] : [type]
其它的可选值
4
[type] param = [default]
7
Optional param As [type] = [default]
可空字符串
1
string param
7
param as String
4
[param] : string
[param] : string option
其它的空值参数
2
[type]? param
8
param As Nullable(of
[type])
4
[param] : Nullable<[type]>
[param] : [type] option
9
param as [type]?
可选的其它可空参数
4
[type]? param = [default]
10
Optional param As [type]? = [default]
4
?[param] : Nullable<[type]>
?[param] : [type] option
注意:F#不支持返回多个值,所以这种支持是有限的。不使用 ByRef 语法是不能更新多个任意的可变值。
评论