众所周知,这个问题大多是学术性的,尽管我试图在现实世界的解决方案中使用这个概念。我知道这个例子是人为的,但我相信这个概念是正确的。
我想写一些流利的代码如下:
copy(my_first_file).to(my_second_file)短小,通俗易懂,完全合法。因此,我定义我的复制方法如下:
Private Function copy(FilePath as String) As Object
Return New With {.to = New Action(Of String)(Function(x) my_real_copy_method(FilePath,x))}
End Function我意识到,我不能强迫匿名类型进入特定类型(比如实现接口或其他类),我不希望定义特定类的开销只是为了将我想要的流利名称与实际的方法名称匹配起来。因此,我能够使代码像这样工作:
copy(my_first_file).to.Invoke(my_second_file)因此,这里没有IntelliSense或类型识别,我必须包含Invoke才能运行该方法。在以下约束条件下,如何获得更多的类型安全性并排除调用方法:
我知道这听起来很苛刻,如果我太难的话,可以随便叫“公牛”!
提前谢谢。
发布于 2011-03-03 17:41:26
因为VB没有泛型方法的返回类型推断,即使在没有歧义的地方,也没有的方法。
您可以有一个强类型函数,它使用泛型返回匿名类型,但是不能用推断的泛型调用它,您需要显式地指定它们。
Private Function Copy(Of T)(filePath as String, prototype As T) As T
Return New With { .To = … }
End Function(与.NET相适应的命名约定)
这必须如下所示:
Dim nullAction As Action(Of String) = Nothing
Dim proto = New With { .To = nullAction }
Copy(firstFile, proto).To(secondFile)发布于 2011-03-03 17:44:32
对不起,这是我能想到的最好的了。它不符合您的requirements....but,它确实提供了您想要的语法。
Sub Main()
copy("myFile").To("myOtherFile")
End Sub
Private Function copy(ByVal FilePath As String) As String
Return FilePath
End Function
<Extension()> _
Public Sub [To](ByVal FromFile As String, ByVal ToFile As String)
' Code to really copy goes here
my_real_copy_method(FromFile, ToFile)
End Sub发布于 2011-03-04 13:48:59
我知道你说你的例子是人为的,但这个怎么样?它支持方法链接(CopyTo 返回 a FileInfo),即使它不是流利。它也内置在System.IO中。
Dim f As New FileInfo("c:\x.txt")
f.CopyTo("c:\y.txt")https://stackoverflow.com/questions/5184178
复制相似问题