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

时间:2016-03-28 14:21:31

标签: 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);
    }
}

然而,当试图使数字n1 = val时; (当val是一个字符串时) 我不知道因为第一行无法编译:

string val = 500;

以下不会起作用:

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

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

顺便说一下我得到了op过载的想法 针对以下具体案例:return new Number(num); 我只是初始化ctor
还需要一些更有趣的理解 提前!

1 个答案:

答案 0 :(得分:5)

我认为你引用的函数在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();
}