小弟上次去面试,有这样一道笔试题:用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;
}

解决方案 »

  1.   

    要想真正做的话,需要做两步,
    第一步就是隐式转换,即需要把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 );