【发布时间】:2019-02-27 17:18:39
【问题描述】:
我有一个Interface,它定义了一组类,它们都实现了.ToString 成员。
我怎样才能让原生数据类型String 也实现这个Interface?
首先我不确定我会怎么做,但有件事告诉我String 是NotInheritable 让事情变得更加困难?
下面我的试探:(C#中的答案也可以接受)
Public Interface IString
Function ToString() As String
End Interface
Partial Public Class String
Implements IString
Public Shadows Function ToString() As String Implements IString.ToString
Return MyBase.ToString()
End Function
End Class
我想要达到的目标
我的一个潜艇应该能够将多个类型作为输入,其中一个是原生的String 类型。
Sub DoSomething(MyData as IString)
'... Do something using MyData.ToString, for example send it to a WebAPI
End Sub
Public Class SomeData
Implements IString 'Sub DoSomething should accept this type
Public Sub ToString() as String
Return 'Something
End Sub
End Class
Public Class SomeOtherData
'Sub DoSomething should NOT accept this type
Public Sub ToString() as String
Return 'Something
End Sub
End Class
我想避免这样做:
Sub DoSomething(MyData as Object)
If not TypeOf MyData Is String or not TypeOf MyData Is SomeData Then Throw New ArgumentException()
'...
End Sub
我想避免这样做:
Sub DoSomething(MyData as String)
'...
End Sub
'Overload
Sub DoSomething(MyData as SomeData)
call DoSomething(MyData.ToString)
End Sub
【问题讨论】:
-
您能告诉我们您为什么要这样做吗? .NET 中的所有内容都已经有一个 ToString 方法(它位于 System.Object 上)
-
您希望如何修改 String 类来实现任何东西?
-
它与 this post 相关,我在其中创建了一个
Base64String类型,以便我可以判断我的数据何时是 Unicode 字符串类型或 BytesEncodedIntoBase64 字符串类型。我的一些功能应该可以作为argument。所以我想创建一个包含两者的接口。我需要从Base64String得到的只是.ToString,它返回一个String。 -
@CamiloTerevinto 我不知道,这就是我在这里的原因:)
-
你能更清楚地解释你想要做什么。字符串已经是字符串了,你想让
ToString方法返回什么?