C#与java的异同

    网上到处充斥这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);
            }
        }

    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值