我对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
还需要一些更有趣的理解
提前!
答案 0 :(得分:5)
我认为你引用的函数在Number
类中。您已在该类中添加了从int
到string
的转换运算符,这是不合法的。您只能添加转换为其定义类型的运算符,例如:
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();
}