Как создать новый тип System.String с другим именем?
Я пытаюсь описать свою проблему шаг за шагом, потому что я не знаю, как сказать это в правильных терминах программирования.
Когда я использую тип System.String, я делаю следующее:
- Объявите тип:
Dim Str1 as String
- Назначьте его значение:
Str1 = "This is a string"
Я хочу создать новый тип, похожий на тип System.String, но с другим именем. Например, я хочу создать тип UrlString для строки следующим образом:
- Объявите тип:
Dim Str2 as UrlString
- Назначьте его значение:
Str2 = "http://www.example.com"
Мой вопрос: как мне создать тип UrlString?
Причина. Я хочу создать тип UrlString, чтобы помочь мне определить ценность содержимого. Например, тип UrlString означает, что строка находится в формате url, PhoneString означает, что строка находится в телефонном формате, тип CreditCardString означает, что строка находится в формате кредитной карты и т.д.
UPDATE:
Спасибо Marc Gravell и GSerg. Вот решение:
Class UrlString
Private ReadOnly value As String
Public Sub New(ByVal value As String)
Me.value = value
End Sub
Public Shared Widening Operator CType(ByVal value As String) As UrlString
Return New UrlString(value)
End Operator
Public Shared Widening Operator CType(ByVal u As UrlString) As String
Return u.value
End Operator
Public Overrides Function GetHashCode() As Integer
Return If(value Is Nothing, 0, value.GetHashCode())
End Function
Public Overrides Function Equals(ByVal obj As Object) As Boolean
Return String.Equals(value, DirectCast(obj, String))
End Function
Public Overrides Function ToString() As String
Return value
End Function
End Class
Ответы
Ответ 1
Вам нужно добавить оператор неявного преобразования от string
до UrlString
для этого. В С#:
class UrlString
{
private readonly string value;
public UrlString(string value) { this.value = value; }
public static implicit operator UrlString(string value)
{
return new UrlString(value);
}
public override int GetHashCode()
{
return value == null ? 0 : value.GetHashCode();
}
public override bool Equals(object obj)
{
return string.Equals(value, (string)obj);
}
public override string ToString()
{
return value;
}
}
Тогда:
UrlString foo = "abc";