<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    C#與java的異同

    Posted on 2007-02-10 17:39 dennis 閱讀(688) 評論(0)  編輯  收藏 所屬分類: C#歷程
    ??? 網(wǎng)上到處充斥這c#與java對比的文章,看了看,還是覺的MSDN上的一篇文章很全面和客觀。《針對JAVA開發(fā)人員的C#編程語言》。

    ??? 我的第一天C#學(xué)習(xí),總體感覺C#在語言層面上保留了更多C++/C的特點,比如virtual,override關(guān)鍵字的使用,比如結(jié)構(gòu)(值類型,存儲在棧上),比如delegate(類似函數(shù)指針)。比較感興趣的也就是delegate、事件和attribute方面。C#某種意義上講比java稍微復(fù)雜,比C++簡單。

    ??? 參照語言規(guī)范寫的例子,抽象類、繼承的例子,可以擴(kuò)展成一個簡單計算器:
    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"

    ????????}
    ????}

    }

    再來一個委托的例子,函數(shù)作為變量的傳遞和使用,對有C++經(jīng)驗或者動態(tài)語言經(jīng)驗的人來說不會奇怪:

    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()調(diào)用
    ????????????
    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);
    ????????????}
    ????????}

    ????}
    }

    主站蜘蛛池模板: 国产亚洲美女精品久久久久| 免费人成网上在线观看| 亚洲欧美成人一区二区三区| 在线观看亚洲网站| 中文字幕无码一区二区免费| 最刺激黄a大片免费网站| 青青草免费在线视频| 免费在线观看你懂的| 久久精品国产亚洲av麻豆| 亚洲婷婷第一狠人综合精品| 无码天堂亚洲国产AV| 免费黄色电影在线观看| 永久免费的网站在线观看| 免费中文字幕在线| 亚洲Av永久无码精品三区在线 | 亚洲成a∨人片在无码2023 | 亚洲色大成网站www永久网站| 男男gay做爽爽免费视频| 你懂的免费在线观看网站| 四虎永久在线精品免费网址| 亚洲狠狠爱综合影院婷婷| 亚洲国产综合精品中文第一区| 亚洲高清乱码午夜电影网| a毛片久久免费观看| 成人A级毛片免费观看AV网站| 国产偷窥女洗浴在线观看亚洲| 亚洲视频在线观看网站| 欧洲乱码伦视频免费国产 | 日本道免费精品一区二区| 在线观看视频免费完整版| 亚洲综合国产精品第一页 | 亚洲国产日韩一区高清在线| 亚洲成AV人片高潮喷水| 特级精品毛片免费观看| 国产又长又粗又爽免费视频| 亚洲黄色三级网站| 性生大片视频免费观看一级 | 亚洲高清中文字幕免费| 亚洲无码视频在线| 国产亚洲精品VA片在线播放| 久久www免费人成精品香蕉|