У меня есть решение с несколькими проектами. Один из проектов представляет собой набор общего кода, который будет управлять несколькими различными клиентскими приложениями и серверным приложением. У меня есть пространство имен Common
, которое находится в проекте само по себе. Это пространство имен имеет несколько открытых функций: Formater
и UnFormater
. Эти функции отлично работают во всех других проектах. Однако в некоторых проектах я хотел бы иметь возможность перегружать эти функции. Перегрузки будут принимать структуру данных, уникальную только для этого конкретного проекта, и преобразовывать ее в формат, понятный Common
Formater
и UnFormater
, а затем передавать им всю работу для выполнения.
Это имеет несколько преимуществ. Мне нравится иметь возможность хранить общие части моего кода в одном месте, но я также хотел бы перегрузить их, чтобы упростить их использование в различных проектах с пользовательскими типами данных.
Для демонстрации (пример кода):
Проект 1:
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
В Project 2 на myString
в обеих функциях я получаю следующую ошибку:
"Значение типа 'String' не может быть преобразовано в 'System.Text.StringBuilder'.
Как мне заставить это работать? Это вообще возможно?
UPDATE:
Вот решение, которое у меня есть до сих пор. Может кто-нибудь объяснить, почему это работает, а выше нет? Куча общих функций должна быть такой же, как функции в модуле, поэтому я не понимаю.
Проект 1:
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