<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 閱讀(689) 評論(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ī)范寫的例子,抽象類、繼承的例子,可以擴展成一個簡單計算器:
    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);
    ????????????}
    ????????}

    ????}
    }

    主站蜘蛛池模板: 久久亚洲精品成人综合| 亚洲AV无码一区二三区| 内射少妇36P亚洲区| 成人毛片100免费观看| 在线亚洲午夜理论AV大片| 欧洲乱码伦视频免费国产| 青青青国产色视频在线观看国产亚洲欧洲国产综合 | 无码天堂亚洲国产AV| 日本特黄特色aa大片免费| 亚洲性色AV日韩在线观看| 在线免费观看污网站| 国产精品国产亚洲区艳妇糸列短篇| 最新免费jlzzjlzz在线播放| 中文字幕无码亚洲欧洲日韩| 免费做爰猛烈吃奶摸视频在线观看| jlzzjlzz亚洲jzjzjz| 久久久久久国产精品免费免费| 亚洲人成网亚洲欧洲无码| 国产成人免费手机在线观看视频 | 国产av天堂亚洲国产av天堂| 国内精品免费视频精选在线观看| 亚洲AV无码专区国产乱码电影 | 亚洲制服在线观看| 性感美女视频免费网站午夜| 美女被艹免费视频| 亚洲中文字幕无码久久精品1| 国产精品免费大片| 亚洲五月综合网色九月色| 国产免费69成人精品视频| 亚欧乱色国产精品免费视频| 亚洲a在线视频视频| 国产a视频精品免费观看| 亚洲av乱码中文一区二区三区| 免费一级毛片女人图片| 99精品视频免费| 亚洲欧洲精品久久| 全黄性性激高免费视频| 午夜精品射精入后重之免费观看| 亚洲一级毛片视频| 亚洲国产成人VA在线观看| 99re6免费视频|