【发布时间】:2011-05-04 02:32:14
【问题描述】:
我有一个包含多个项目的解决方案。其中一个项目是一组通用代码,这些代码将驱动几个不同的客户端应用程序和一个服务器应用程序。我有一个命名空间Common,它本身就在一个项目中。这个命名空间有几个公共函数:Formater 和 UnFormater。这些功能在其他各种项目中都能正常工作。但是,在某些项目中,我希望能够重载这些功能。重载将采用仅对该特定项目唯一的数据结构,并将其变异为 Common Formater 和 UnFormater 可以理解的格式,然后将工作交给他们完成。
这有几个优点。我喜欢将我的代码的公共部分放在一个地方,但我也想重载它们,使它们更容易在具有自定义数据类型的各种项目中使用。
演示(示例代码):
项目一:
Namespace Common
Public Module FormatingServices
Public Function Formater(ByVal DataToFormat As String) As String
'format the data
End Function
Public Function UnFormater(ByVal DataToUnFormat As String) As String
'unformat the data
End Function
End Module
End Namespace
项目 2:
Namespace Common
Public Module FormattingServices
Public Function Formater(ByVal DataToFormat As StringBuilder) As String
Dim myString As String = DataToFormat.ToString
Return Formater(myString)
End Function
Public Function UnFormater(ByVal DataToUnFormat As StringBuilder) As String
Dim myString As String = DataToUnFormat.ToString
Return UnFormater(myString)
End Function
End Module
End Namespace
在两个函数中myString 的项目 2 中,我收到以下错误:
“'String' 类型的值无法转换为 'System.Text.StringBuilder'。
如何让它工作?有没有可能?
更新:
这是我目前的解决方案。有人可以解释为什么这有效而上述无效吗?一堆共享函数应该和一个模块中的函数是一样的,所以没看懂。
项目一:
Public Class FormattingServices
Public Shared Function Formatter(ByVal myString As String) As String
Return myString & myString
End Function
End Class
项目 2:
Imports System.Text
Namespace Common
Public Class FormattingServices
Inherits ClassLibrary1.FormattingServices
Public Overloads Shared Function Formatter(ByVal myString As StringBuilder) As String
Return Formatter(myString.ToString)
End Function
End Class
End Namespace
项目 3:
Imports ClassLibrary2.Common.FormattingServices
Imports System.Text
Module Module1
Sub Main()
Console.WriteLine("String Test: " & Formatter("This is a test string."))
Console.WriteLine("StringBuilder Test: " & Formatter(New StringBuilder("This is a test StringBuilder string.")))
Console.Read()
End Sub
End Module
【问题讨论】:
标签: .net namespaces overloading