网上到处充斥这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);
}
}
}
}
分享到:
相关推荐
c#与java异同.docx c#与java异同.docx c#与java异同.docx c#与java异同.docx c#与java异同.docx
2001年的时候,Dare Obasanjo写过一篇文章,名为《论C#与Java之异同(Comparison of Microsoft's C# Programming Language to Sun Microsystems' Java Programming Language)》,该文以其详尽与精确成为了同类文章...
NIIT SM2 ISAS C#与JAVA的异同
列举java与C#的异同让大家能更好的进行对比,从而加深印象。 是初学者必需掌握的技能,绝对物有所值; C#与Java的异同.ppt
文档讲述了"易语言.飞扬”与 JAVA、C#、C++ 的异同
北大青鸟的内部资料,其中包含了C#和java的异同和基于C#和java的项目开发。
这是本人总结的一些C#基础理论知识 和 C# 与Java 语言的异同
本文分析了Java与C#之间的异同,适合从J2EE迁移到.NET平台的开发人员~~
c#的特点,与c,c++,java的区别
运行时异常和一般异常有何异同? 答:运行时异常时(JVM)java虚拟机在运行过程中发生的问题,比如:内存溢出等问题。这类异常没法要求程序员去一一捕获并抛出,一般异常是Java类库或程序员自己写的代码发生的错误,...
使用VB, C++, Java,c#实现了公历计算的算法实现,对比不同的语言之间的异同,仅供参考。
本课程会向大家介绍3部分内容:第1部分:向大家介绍编译器与解释器的异同,大家只有理解了这二者的区别后,才知道为什么C/C++是编译型语言,而java、C#、html都是解释型的。第2部分:介绍高级语言的发展历史,高级与...
《大话设计模式》这本书,通过各种生活中的例子,在小菜和大鸟的不断提问与回答过程中,对程序的不断重构演变,学习设计模式在案例中的适用性,更进一步掌握设计模式的异同和关键点。 ## 使用说明   ...
GoF 的《设计模式》是所有面向对象语言(C++ Java C#)的基础,只不过不同的语言将之实现得更方便地使用。 GOF 的设计模式是一座"桥" 就 Java 语言体系来说,GOF 的设计模式是 Java 基础知识和 J2EE 框架知识之间一...
25.请详述在dotnet中类(class)与结构(struct)的异同? 答:Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的. [Page] 26.根据委托(delegate)的知识,请完成以下用户...