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

标签 .net vb.net

我尝试逐步描述我的问题,因为我不知道如何用正确的编程术语来表达。

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

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

  • 我想创建一个类似于 的新类型System.String 键入但名称不同。例如,我想创建一个 网址字符串 像这样输入字符串:
  • 声明类型:Dim Str2 as UrlString
  • 分配其值:Str2 = "http://www.example.com"

  • 我的问题是 : 我如何创建 网址字符串 类型?

    原因 : 我想创建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
    

    最佳答案

    您需要从 string 添加一个隐式转换运算符至 UrlString让它工作。在 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;
        }
    }
    

    然后:
    UrlString foo = "abc";
    

    关于.net - 如何使用其他名称创建新的 System.String 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6451263/

    相关文章:

    .net - 如何在 PowerShell 中将标签的背景设置为透明?

    vb.net - 如何在我的应用程序中安装 SQL Server LocalDB?

    c# - 为什么在尝试使用 DotConnect 组件检索结果集时会出错?

    .net - 从 Windows 服务中杀死一个进程

    c# - 无法在 Internet Explorer 上绘图

    vb.net - 始终处于领先地位的桌面 YouTube 播放器

    c# - 控制哪些项目离开堆栈面板的可见区域

    vb.net - 使用 ListView 作为文件/文件夹资源管理器

    vb.net - 如何通过 RF-433 模块从 VB 应用程序和 arduino 发送数据

    c# - 如何使用正则表达式验证带有空格的逗号分隔字符串