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

N3w*_*bie 1 c# string overloading operator-overloading operator-keyword

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

string val = 500; (I can't implicitly)
Run Code Online (Sandbox Code Playgroud)

然后

Number n1 = val;
Run Code Online (Sandbox Code Playgroud)

我设法得到了Number n1 = someintvalue,例如:

Number n1 = 500;
Run Code Online (Sandbox Code Playgroud)

像这样:

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

但是,当试图使数字n1 = val时; (当val是一个字符串时)我只是因为第一行无法编译而无法解决:

string val = 500;
Run Code Online (Sandbox Code Playgroud)

以下不会起作用:

public static implicit operator string(int A)
{
    return new string(A);
}
Run Code Online (Sandbox Code Playgroud)

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

顺便说一句,我得到op过载的想法,
具体情况如下:return new Number(num); 我只是初步ctor
需要一些更加有趣的理解thx!

D S*_*ley 5

我假设你引用的函数在Number类中.您已经添加了从一个转换操作符intstring那类,这是不合法的范围内.您只能添加转换为其定义类型的运算符,例如:

public static implicit operator string(Number A)
{
    return new string(A.Value);
}
Run Code Online (Sandbox Code Playgroud)

哪个会失败,因为string没有一个构造函数int.你可以这样做:

public static implicit operator string(Number A)
{
    return A.ToString();
}
Run Code Online (Sandbox Code Playgroud)

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

public override string ToString()
{
    return Value.ToString();
}
Run Code Online (Sandbox Code Playgroud)