C#与java的异同

    xiaoxiao2024-04-07  126

    网上到处充斥这c#与java对比的文章,看了看,还是觉的MSDN上的一篇文章很全面和客观。《 针对JAVA开发人员的C#编程语言》。     我的第一天C#学习,总体感觉C#在语言层面上保留了更多C++/C的特点,比如virtual,override关键字的使用,比如结构(值类型,存储在栈上),比如delegate(类似函数指针)。比较感兴趣的也就是delegate、事件和attribute方面。C#某种意义上讲比java稍微复杂,比C++简单。     参照语言规范写的例子,抽象类、继承的例子,可以扩展成一个简单计算器: using  System; using  System.Collections; namespace  VirtualDemo {      public   abstract   class  Expression     {          public   abstract   double  Evaluate(Hashtable vars);              }      public   class  Constant : Expression     {          double  value;          public  Constant( double  value)         {              this .value  =  value;         }          public   override   double  Evaluate(Hashtable vars)         {              return  value;         }     }      public   class  VariableReference : Expression     {          string  name;          public  VariableReference( string  name)         {              this .name  =  name;         }          public   override   double  Evaluate(Hashtable vars)         {              object  value  =  vars[name];              if  (value  ==   null )             {                  throw   new  Exception( " Unknown variable:  "   +  name);             }              return  Convert.ToDouble(value);         }     }      public   class  Operation : Expression     {         Expression left;          char  op;         Expression right;          public  Operation(Expression left,  char  op, Expression right)         {              this .left  =  left;              this .op  =  op;              this .right  =  right;         }          public   override   double  Evaluate(Hashtable vars)         {              double  x  =  left.Evaluate(vars);              double  y  =  right.Evaluate(vars);              switch  (op)             {                  case   ' + ' return  x  +  y;                  case   ' - ' return  x  -  y;                  case   ' * ' return  x  *  y;                  case   ' / ' return  x  /  y;             }              throw   new  Exception( " Unknown operator " );         }     }      public   class  Test     {          public   static   void  Main( string  []args)         {             Expression e  =   new  Operation(              new  VariableReference( " x " ),              ' * ' ,              new  Operation(                  new  VariableReference( " y " ),                  ' + ' ,                  new  Constant( 2 )             )         );         Hashtable vars  =   new  Hashtable();         vars[ " x " =   3 ;         vars[ " y " =   5 ;         Console.WriteLine(e.Evaluate(vars));         //  Outputs "21"         vars[ " x " =   1.5 ;         vars[ " y " =   9 ;         Console.WriteLine(e.Evaluate(vars));         //  Outputs "16.5"         }     } } 再来一个委托的例子,函数作为变量的传递和使用,对有C++经验或者动态语言经验的人来说不会奇怪: using  System; namespace  DelegateDemo {      delegate   double  Function( double  x);      class  Multiplier     {          double  factor;          public  Multiplier( double  factor)         {              this .factor  =  factor;         }          public   double  Multiply( double  x)         {              return  x  *  factor;         }     }      class  Test     {          static   double  Square( double  x)         {              return  x  *  x;         }          static   double [] Apply( double [] a, Function f)         {              double [] result  =   new   double [a.Length];             //直接通过f()调用              for  ( int  i  =   0 ; i  <  a.Length; i ++ ) result[i]  =  f(a[i]);              return  result;         }          static   void  Main()         {              double [] a  =  {  0.0 0.5 1.0  };             //delegate Function分别赋予了不同的方法              double [] squares  =  Apply(a,  new  Function(Square));              double [] sines  =  Apply(a,  new  Function(Math.Sin));             Multiplier m  =   new  Multiplier( 2.0 );              double [] doubles  =  Apply(a,  new  Function(m.Multiply));              foreach  ( double  b  in  doubles)             {                 Console.WriteLine(b);             }         }     } } 文章转自庄周梦蝶  ,原文发布时间5.17 相关资源:敏捷开发V1.0.pptx
    最新回复(0)