`

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

    }
}

分享到:
评论

相关推荐

    c#与java异同(绝世之作)

    c#与java异同.docx c#与java异同.docx c#与java异同.docx c#与java异同.docx c#与java异同.docx

    论C#与Java之异同

    2001年的时候,Dare Obasanjo写过一篇文章,名为《论C#与Java之异同(Comparison of Microsoft's C# Programming Language to Sun Microsystems' Java Programming Language)》,该文以其详尽与精确成为了同类文章...

    NIIT ISAS C#与JAVA的异同资料及简单ppt

    NIIT SM2 ISAS C#与JAVA的异同

    java与C#的相同点与不同点

    列举java与C#的异同让大家能更好的进行对比,从而加深印象。 是初学者必需掌握的技能,绝对物有所值; C#与Java的异同.ppt

    "易语言.飞扬”与 JAVA、C#、C++ 的异同

    文档讲述了"易语言.飞扬”与 JAVA、C#、C++ 的异同

    北大青鸟内部资料C#和java

    北大青鸟的内部资料,其中包含了C#和java的异同和基于C#和java的项目开发。

    C#基础理论知识总结

    这是本人总结的一些C#基础理论知识 和 C# 与Java 语言的异同

    针对Java开发人员的C# 编程语言.pdf

    本文分析了Java与C#之间的异同,适合从J2EE迁移到.NET平台的开发人员~~

    C#特点详细介绍,与其他语言的区别

    c#的特点,与c,c++,java的区别

    java面试题

    运行时异常和一般异常有何异同? 答:运行时异常时(JVM)java虚拟机在运行过程中发生的问题,比如:内存溢出等问题。这类异常没法要求程序员去一一捕获并抛出,一般异常是Java类库或程序员自己写的代码发生的错误,...

    几种语言实现公历计算

    使用VB, C++, Java,c#实现了公历计算的算法实现,对比不同的语言之间的异同,仅供参考。

    《计算机体系结构—软件篇3》 之 解释器、语言、算法

    本课程会向大家介绍3部分内容:第1部分:向大家介绍编译器与解释器的异同,大家只有理解了这二者的区别后,才知道为什么C/C++是编译型语言,而java、C#、html都是解释型的。第2部分:介绍高级语言的发展历史,高级与...

    23个设计模式源码案例.zip

    《大话设计模式》这本书,通过各种生活中的例子,在小菜和大鸟的不断提问与回答过程中,对程序的不断重构演变,学习设计模式在案例中的适用性,更进一步掌握设计模式的异同和关键点。 ## 使用说明 &emsp;&emsp;...

    二十三种设计模式【PDF版】

    GoF 的《设计模式》是所有面向对象语言(C++ Java C#)的基础,只不过不同的语言将之实现得更方便地使用。 GOF 的设计模式是一座"桥" 就 Java 语言体系来说,GOF 的设计模式是 Java 基础知识和 J2EE 框架知识之间一...

    net学习笔记及其他代码应用

    25.请详述在dotnet中类(class)与结构(struct)的异同? 答:Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的. [Page] 26.根据委托(delegate)的知识,请完成以下用户...

Global site tag (gtag.js) - Google Analytics