C# 运算符重载、重写字符串?

标签 c# string operator-overloading overloading operator-keyword

我对 C# 很陌生 目前正在学习运算符重载 我正在尝试做这样的事情:

string val = 500; (I can't implicitly)

然后

Number n1 = val;

我设法获取Number n1 = someintvalue,例如:

Number n1 = 500;

像这样:

public struct Number
{
    public int Value { get; set; }
    public Number(int Val)
    {
        Value = Val;
    }
    public static implicit operator Number(int num)
    {
        return new Number(num);
    }
}

但是,当尝试使 Number n1 = val; (当 val 是字符串时) 我根本不能,因为第一行无法编译:

string val = 500;

并且以下内容不起作用:

public static implicit operator string(int A)
{
    return new string(A);
}

因为 1 个我无法理解的错误
1)用户定义的转换必须与封闭类型相互转换

顺便说一句,我明白了操作过载的想法
在这种特定情况下:return new Number(num); 我只是初始化ctor
仍然需要一些更基本的了解 谢谢!

最佳答案

我认为您引用的函数位于 Number 类中。您在该类中添加了从 intstring 的转换运算符,这是不合法的。您只能添加与它们定义的类型相互转换的运算符,例如:

public static implicit operator string(Number A)
{
    return new string(A.Value);
}

这将失败,因为string没有采用int的构造函数。您可以这样做:

public static implicit operator string(Number A)
{
    return A.ToString();
}

但是“转换”为字符串的标准方法是重载ToString方法,当请求转换为字符串时,编译器通常会自动调用该方法:

public override string ToString()
{
    return Value.ToString();
}

关于C# 运算符重载、重写字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36264273/

相关文章:

c# - 此 Canon SDK C++ 代码片段的等效 C# 代码是什么?

python - 如何将给定的字符串转换为所需的字符串,如下面的 Python 所示

c++ - 了解 C++ 运算符重载

r - 赋值运算符的重载与长度函数的组合如何工作?

c++ - 复制构造函数 Big 3 C++ 问题

c# - 使用 var 或不使用 var

c# - 将反向移动平均公式转换为 C#

c# - Web API 2 路由属性不起作用

python - 如何删除 DataFrame 字符串中的特殊字符(例如 ",")?

用于在数组中连接匹配索引字符串的 PHP 函数?