文档章节

C#与java的异同

乱蓬头
 乱蓬头
发布于 2017/05/18 13:26
字数 648
阅读 5
收藏 0

摘要: 网上到处充斥这c#与java对比的文章,看了看,还是觉的MSDN上的一篇文章很全面和客观。《针对JAVA开发人员的C#编程语言》。     我的第一天C#学习,总体感觉C#在语言层面上保留了更多C++/C的特点,比如virtual,override关键字的使用,比如结构(值类型,存储在栈上),比如delegate(类似函数指针)。

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

本文转载自:http://click.aliyun.com/m/21363/

共有 人打赏支持
乱蓬头
粉丝 0
博文 382
码字总数 2595
作品 0
【翻译】C#编程语言和JAVA编程语言的比较(上)

【翻译】C#编程语言和JAVA编程语言的比较(上) 原文地址:http://www.25hoursaday.com/CsharpVsJava.html 简介 C#语言是一门面向对象的语言,开发者可以使用C#和微软.NET平台快速构建各种应...

fbf
2013/08/13
0
0
回调函数,就是回头再调用的函数

又遇到了回调函数,这次打算写下来分享一下。 所谓回调函数,或者在面向对象语言里叫回调方法,简单点讲,就是回头在某个时间(事件发生)被调用的函数。 再详细点:就是一个函数A,作为参数,传...

er3456qi
08/27
0
0
如何通过jni4net,在Java应用中调用C#接口

下载Dynamic .NET TWAIN 下载jni4net,学习里面的代码实例 在环境变量中设置好JAVAHOME和C:WindowsMicrosoft.NETFrameworkv3.5csc.exe 解压JavaTwain,在dll目录中运行工程,编译出JavaTwain...

yushulx
2014/07/02
0
0
@protocol (协议)和 @interface (接口)的区别

Objective-C 中的协议(@protocol),相当于 C#, Java 等语言中的接口 (Interface)。协议本身不实现任何方法,只是声明方法,使用协议的类必须实现协议方法。 Objective-C 中的接口(@interface...

Jack088
2015/09/02
0
0
java和C#里byte的取值范围

java里一个byte取值范围是-128~127, 而C#里一个byte是0~255. 首位不同. 但是底层I/O存储的数据是一样的, 比如, 十进制的100, 转换成java或者c#的byte, 都是1100110. 但是, 使用java的getByte...

喔喔兒
2011/03/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

防止快速重复点击的两种思维

防止重复执行的两种思维 场景 下单时,提交按钮,因为网络卡顿或者手快重复点击,导致重复提交订单; 微博,更新个人状态或发表评论时,快速多次点击[发送]按钮,导致相同的信息发送多次. 解决思路 ...

黄威
27分钟前
0
0
在windows环境下使用Virtualbox虚拟Debian系统来运行Docker

标题绕口。 我之前一直使用 Virtualbox 和 homestead 来运行我的 PHP 开发环境。最近决心开始尝试 DevOps,使得开发、部署容器化,来化解人为操作失误和环境不兼容等问题造成的各种损失。就打...

zgldh
29分钟前
0
0
python map()

map()函数 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。(利用生成器的原理,并不马上返回值,...

南桥北木
43分钟前
0
0
分享几个 SpringBoot 实用的小技巧

前言 最近分享的一些源码、框架设计的东西。我发现大家热情不是特别高,想想大多数应该还是正儿八经写代码的居多;这次就分享一点接地气的: SpringBoot 使用中的一些小技巧。 算不上多高大上...

Java干货分享
43分钟前
2
0
day123-20181021-英语流利阅读-待学习

这款新字体,比记忆面包还管用 Lala 2018-10-21 1.今日导读 字体能跟学习效果有什么关系?你还别说,来自澳洲的心理学家和设计师们,还真创造了一款号称能够帮助大家记忆信息、增强学习效果的...

飞鱼说编程
55分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部