如何使用其他名称创建新的System.String类型?

Pan*_*zza 11 .net vb.net

我试着一步一步地描述我的问题,因为我不知道如何用正确的编程术语说出来.

当我使用System.String类型时,我执行以下操作:

  1. 声明类型: Dim Str1 as String
  2. 分配其值: Str1 = "This is a string"

我想创建一个类似于System.String类型但名称不同的新类型.例如,我想为这样的字符串创建一个UrlString类型:

  1. 声明类型: Dim Str2 as UrlString
  2. 分配其值: Str2 = "http://www.example.com"

我的问题是:如何创建UrlString类型?

原因是:我想创建UrlString类型以帮助我识别内容的值.例如,UrlString类型表示字符串是url格式,PhoneString表示字符串是电话格式,CreditCardString类型表示字符串是信用卡格式,依此类推.

更新:

谢谢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
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 8

您需要添加一个隐式转换运算符,stringUrlString使其起作用.在C#中:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后:

UrlString foo = "abc";
Run Code Online (Sandbox Code Playgroud)