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);
            }
        }

    }
}
文章转自庄周梦蝶  ,原文发布时间5.17
目录
相关文章
|
开发框架 Oracle Java
2023年10月TIOBE排行榜发布:C#逼近Java
2023年10月TIOBE排行榜发布:C#逼近Java
643 0
|
存储 Java C#
c#快速入门~在java基础上,知道C#和JAVA 的不同即可
c#快速入门~在java基础上,知道C#和JAVA 的不同即可
425 0
|
开发框架 Java .NET
C#与Java
在动态且不断发展的软件开发世界中,Java 和 C# 是两个巨头,每个都有自己独特的优势、理念和生态系统。本文深入比较了 Java 和 C#,探讨了它们的历史背景、语言特性、性能指标、跨平台功能等。
668 19
C#与Java
|
Java C# 数据安全/隐私保护
|
Java Go C#
编程语言C#、C++、Java、Python、go 选择哪个好?
我想说的是,不论选择哪种编程语言,决定选择的都是你最终的目的,做选择之前,先充分调研每一个选择项,再做选择思路就会非常清晰了。
779 3
|
Java C#
C# 和 java 基本数据类型
C# 和 java 基本数据类型
234 0
|
搜索推荐 Java C#
转:冒泡排序算法C#、C++和JAVA代码的区别
冒泡排序算法的C#、C++和Java代码的基本结构是相同的,但是由于语言本身的差异,在细节上可能会有所不同。例如,C++代码可能使用指针来操作数组,而C#和Java代码则可能使用索引来访问数组。在语法上,C#和Java代码可能更相似,而C++可能更像C语言。
311 1
转:冒泡排序算法C#、C++和JAVA代码的区别
|
人工智能 搜索推荐 Java
C# 最有可能摘得“年度编程语言”,Python、Java 正在让位,TIOBE 12 月编程语言榜单最新预测来了!
C# 最有可能摘得“年度编程语言”,Python、Java 正在让位,TIOBE 12 月编程语言榜单最新预测来了!
287 1
|
Java
Java中的抽象类和接口之间的异同点
抽象类顾名思义是之抽象出来的类,具有多个类的共性,是抽象的。抽象类和具体类是相对的概念。“抽象”是一种存在思想逻辑中的概念,而“具体”是一种可见可触摸的现实对象。简单说,法拉利,保时捷,兰博基尼,布加迪等多种车子,可以抽象出车,也可以抽象出跑车,这就是抽象出来的类别,称为抽象类。
154 0
|
SQL Rust Java
C# 逼近 Java
C# 是一个严重被低估的全能型编程语言,C# 和 Java 之间的差距越来越小,达到了历史新低,目前两者的差距仅为 1.2%。TIOBE CEO Paul Jansen 认为,如果这一趋势继续保持,那么 C# 将在两个月后超过 Java。
522 2