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!
我假设你引用的函数在Number类中.您已经添加了从一个转换操作符int的string那类,这是不合法的范围内.您只能添加转换为其定义类型的运算符,例如:
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)
| 归档时间: |
|
| 查看次数: |
284 次 |
| 最近记录: |