【发布时间】:2016-03-28 14:21:30
【问题描述】:
我对 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
还需要一些更基本的了解
提前谢谢!
【问题讨论】:
-
旁注:不要使用
struct,除非您了解它和class之间的区别,并且明确需要struct。可变结构会导致各种通常不必要的问题。 -
另外,
string val = 500;是不好的做法。如果你想要一个字符串,那么使用一个字符串:string val = "500";C# 是一种强类型语言,应该这样对待 - 添加多个类型转换重载会破坏类型安全。
标签: c# string operator-overloading overloading operator-keyword