我对 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
类中。您在该类中添加了从 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();
}
关于C# 运算符重载、重写字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36264273/