小弟上次去面试,有这样一道笔试题:用winform制作一个简单的计算器,只用实现+-运算,但是要求只能使用string类型的变量。我解决的方法是通过重载运算符,把string类型的变量先显式转化为double类型相加后在转回string类型,返回到主程序。回来之后自己做了一下,发现重载运算符之后在调试时系统仍然提示“运算符‘-’无法运用于string和string类型的操作数”。就是说运算符还是没有重载,请大家帮我看一下是怎么回事,以下是我重载-运算符的代码,+运算符的和他类似。
public static Form1 operator- (Form1 from)
{
Form1 result=new Form1();
double val1;
double val2;
val1=Convert.ToDouble(from.number1);
val2=Convert.ToDouble(from.number2);
double k=val1-val2;
result.result=k.ToString();
return result;
}
public static Form1 operator- (Form1 from)
{
Form1 result=new Form1();
double val1;
double val2;
val1=Convert.ToDouble(from.number1);
val2=Convert.ToDouble(from.number2);
double k=val1-val2;
result.result=k.ToString();
return result;
}
第一步就是隐式转换,即需要把string类型转换成你所要操作的类型;
第二步就是运算符操作。Sample code as follows:
public struct MyString
{
private string strValue;
public string Value
{
get{ return strValue;}
} public static string operator -( MyString test1, MyString test2)
{
double val1;
double val2;
val1=Convert.ToDouble(test1.strValue);
val2=Convert.ToDouble(test2.strValue);
double k=val1-val2;
return k.ToString();
} public MyString( string sValue )
{
strValue = sValue;
} public static implicit operator MyString( string sValue )
{
return new MyString( sValue );
}
}//Calling
MyString string1 = "11.1";
MyString string2 = "12.1";
MessageBox.Show( string1 - string2 );