新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论.NET,C#,ASP,VB技术
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 Dot NET,C#,ASP,VB 』 → 初探c#(六 至 十) 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 5145 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 初探c#(六 至 十) 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 Dot NET,C#,ASP,VB 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客楼主
    发贴心情 初探c#(六 至 十)

    初探c#(六)统一系统类型
    c#独创了一种类型——统一系统类型(为了这个累刑,我头疼死了。谁有更好的名字,请务必告诉我)。总之,所有的其他类型,包括值和引用,都可以被当作统一系统类型来对待。从概念上说,所有的类型都从它派生。这样,其他的类型就可以使用统一系统类型的属性和方法。包括一些“简单”类型,如:int。还是给个例子吧:

    */
    using System;
    class Test
    {
    static void Main() {
    Console.WriteLine(3.ToString());
    }
    }
    /*

      “3.ToString()”调用了object的“ToString()”方法。相信学过c/c++的朋友都知道要输出一个数字有多麻烦,现在就省事了。再看一个:*/

    class Test
    {
    static void Main() {
    int i = 123;
    object o = i; // boxing
    int j = (int) o; // unboxing
    }
    }
    /*

      这个像帽子戏法的例子中,从“int”转换成“object”,又转换回来。这样一来,在值和引用之间就架起了一座桥梁。

    QQ病毒 腾讯QQ空间代码专题 PPT教程专题 ADSL应用面面俱到 Fireworks教程专题 计算机和网络技术基础知识 校园网专题 网吧技术专题 这样有什么用呢。即兴举一个常见的例子...就min把。在c/c++中:*/

    // c/c++ code

    void min(int i, int j)
    {
    return ((i < j) ? i : j);
    }

    /* 如果比较的不是int,或者说可能是int,也可能是float、double呢?可以这样:*/

    template
    T min (T i, T j)
    {
    return ((i < j) ? i : j)
    }

    /* 用c#可以:*/
    void swap (object a, object b)
    {
    return ((i < j) ? i : j);
    }

    /*
      我想大家一定看出来第二个例子要比较一个int和一个float的话,还需要一些转换,而第三个例子就可以比较所有的变量!这个灵活度简直太大了。所以,我私以为,大家使用时一定要小心!
      它在比较一个int和一个class的时候决不会报错的。呵呵,我发现我的翻译总是越跑越远,总是扣不住原文。篡改甚多,敬请原谅!


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/7/10 16:11:00
     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 Dot NET,C#,ASP,VB 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客2
    发贴心情 
    初探c#(七)语句(Statements)
    c#借用了c/c++大多数的语句方法,不过仍然有些值得注意的地方。还有些地方是有所改动的。在这里,我只提一些c#特有的东东。

    1.7.10 “foreach”语句

      “foreach”语句列举一个集合内的所有元素,并对这些元素执行一系列的操作。还是看看例子吧:*/

    using System;
    using System.Collections;
    class Test
    {
    static void WriteList(ArrayList list) {
    foreach (object o in list)
    {
    int i = (int) o;//如果是for语句,这里一定会报错!
    Console.WriteLine(0);
    Console.WriteLine(++i);
    }
    }
    static void Main() {
    ArrayList list = new ArrayList();
    for (int i = 0; i < 10; i++)
    list.Add(i);
    WriteList(list);
    }
    }

    /*这个例子用“foreach”扫描了整个“list”,并把“list”中所有的元素打印出来。有时候还是挺方便的。

    1.7.15 安全检查开关(The checked and unchecked statements)

      “checked”和“unchecked”语句用来控制数学运算和完整类型转换的检查工作。“checked”检查它作用的域中可能出现的违例,并抛出一个异常;而“unchecked”则阻止所有的检查。举个例子:*/

    using System;
    class Test
    {
    static int x = 1000000;
    static int y = 1000000;
    static int F() {
    checked {return (x * y);} // 抛出 OverflowException
    }
    static int G() {
    unchecked {return (x * y);} // 返回 -727379968
    }
    static int H() {
    return x * y; // 缺省状态。
    }
    static void Main() {
    F(); //可以注销掉此行试试。
    Console.WriteLine(G());
    Console.WriteLine(H());
    }
    }

    /*
    在编译过程中不会有任何错误出现。因为“checked”和“unchecked”只在运行时才起作用。值得一说的是H()。它的缺省状态和编译器当前的缺省溢出检查的状态有关。但返回的结果肯定和F()或G()中的任一个相同。


    QQ病毒 腾讯QQ空间代码专题 PPT教程专题 ADSL应用面面俱到 Fireworks教程专题 计算机和网络技术基础知识 校园网专题 网吧技术专题 再看一个例子:*/

    using System;
    class Test
    {
    const int x = 1000000;
    const int y = 1000000;
    static int F() {
    checked {return (x * y);} // 编译器警告(Compile warning):溢出(overflow)
    }
    static int G() {
    unchecked {return (x * y);} // 返回 -727379968
    }
    static int H() {
    return x * y; // 编译器警告(Compile warning):溢出(overflow)
    }
    static void Main() {
    Console.WriteLine(F()); //可以注销掉此行试试。
    Console.WriteLine(G());
    Console.WriteLine(H()); //可以注销掉此行试试。
    }
    }

    /* 当F()和H()求值的时候,就会引起一个编译警告。而在G()中,因为有了“unchecked”,屏蔽了这个警
    告。要注意的是“checked”和“unchecked”都不能对函数的返回值进行操作!比如:*/

    class Test
    {
    static int Multiply(int x, int y) {
    return x * y;
    }
    static int F() {
    checked{ return Multiply(1000000, 1000000); } // 与 return Multiply(1000000, 1000000);
    } // 有相同的效果。
    }

    /* 其实大家稍微想一下知道为什么m$没有这么做!对这个内容的讨论超出本文的范围和俺的能力之外哦。

      在c#中,所有的十六进制数都是uint。如果用强制类型转换会引起编译器报错。用“unchecked”则可以跳过这个机制,把uint的十六进制数转化为int。如:*/

    class Test
    {
    public const int AllBits = unchecked((int)0xFFFFFFFF);
    public const int HighBit = unchecked((int)0x80000000);
    }

    /* 上例所有的常数都是uint,而且超过了int的范围,没有“unchecked”,这种转换会引发一个编译器错误。注意:上面用的是“unchecked”操作符。不是语句。不过它们之间除了一个用“()”,另一个用“{}”以外,几乎一样。BTW,“checked”同样。

    1.7.16 “lock”语句(The lock statement)

    “lock”获得一个相互排斥的对象锁定。(俺查过一些资料,但都没有清晰说明,暂不介绍)

    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/7/10 16:12:00
     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 Dot NET,C#,ASP,VB 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客3
    发贴心情 
    初探c#(八)类(Classes)
    类用于定义一个新的引用类型。c#不支持多重继承,但支持一个类多重界面(“interfaces”)。
      类的成员包括常量、位域、方法、属性、索引(indexers)、事件、操作符、构造器、析构器和嵌套类型声明。(一口气说这么多,呼——)
      对类中得所有成员有五种访问权限:

    · “public” 可以被所有代码访问;
    · “protected” 只可以被继承类访问;
    · “internal” 只可以被同一个项目的代码访问;
    · “protected internal”只可以被同一个项目的代码或继承类访问;
    · “private” 只可以被本类中的代码访问。
    缺省状态是“private”。

    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/7/10 16:13:00
     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 Dot NET,C#,ASP,VB 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客4
    发贴心情 
    初探c#(九)结构(Structs)
    结构和类又非常多的相似之处,如结构可以实现界面,和可以拥有和类一样的成员。结构与类也有一些重要的区别:结构是值类型,而不是引用类型,所以不支持继承!结构被存在堆栈中或者是内联。结构在精心下可以提高存储效能。例如,定义一个与类有着相同信息的结构可以大大地减少存储空间。在下例中,程序创建并初始化100个points。在类“Point”中需要分配101个独立的对象(object)。*/

    class Point
    {
    public int x, y;
    public Point() {
    x = 0;
    y = 0;
    }
    public Point(int x, int y) {
    this.x = x;
    this.y = y;
    }
    }
    class Test
    {
    static void Main() {
    Point[] points = new Point[100];
    for (int i = 0; i < 100; i++)
    points[i] = new Point(i, i*i);
    }
    }
    /*

    如果“Point”被作为一个结构,就可以这样啦:*/

    struct Point
    {
    public int x, y;
    public Point(int x, int y) {
    this.x = x;
    this.y = y;
    }
    }
    /*

      因为Point在内联中实例化,所以得到了优化。当然,错误运用的只会适得其反。比如,当我们传递结构的时候就会比传递类要慢。因为结构的传递是拷贝值,类是引用值的地址。数据量越大差距就越明显。

      所以“There is no substitute for careful data structure and algorithm design.”(实在是不想译了 ^_^ )。

    1.10 界面(Interfaces)

      界面用来定义一种程序的契约。有了这个契约,就可以跑开编程语言的限制了(理论上)。而实现界面的
    类或者结构要与界面的定义严格一致。界面可以包含以下成员:方法、属性、索引和事件。例子:*/

    interface IExample
    {
    string this[int index] { get; set; }
    event EventHandler E;
    void F(int value);
    string P { get; set; }
    }
    public delegate void EventHandler(object sender, Event e);
    /*

      例子中的界面包含一个索引、一个事件E、一个方法F和一个属性P。
      界面可以支持多重继承。就像在下例中,界面“IComboBox”同时从“ITextBox”和“IListBox”继承。

    */
    interface IControl
    {
    void Paint();
    }
    interface ITextBox: IControl
    {
    void SetText(string text);
    }
    interface IListBox: IControl
    {
    void SetItems(string[] items);
    }
    interface IComboBox: ITextBox, IListBox {}
    /*

      类和结构可以多重实例化界面。 就像在下例中,类“EditBox”继承了类“Control”,同时从“IDataBound”和“IControl”继承。
    */

    interface IDataBound
    {
    void Bind(Binder b);
    }
    public class EditBox: Control, IControl, IDataBound
    {
    public void Paint();
    public void Bind(Binder b) {...}
    }
    /*

      在上面的代码中,“Paint”方法从“IControl”界面而来;“Bind”方法从“IDataBound”界面而来,都以“public”的身份在“EditBox”类中实现。

    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/7/10 16:13:00
     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 Dot NET,C#,ASP,VB 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客5
    发贴心情 
    初探c#(十)界面(Interfaces)
    界面用来定义一种程序的契约。有了这个契约,就可以跑开编程语言的限制了(理论上)。而实现界面的
    类或者结构要与界面的定义严格一致。界面可以包含以下成员:方法、属性、索引和事件。例子:*/

    interface IExample
    {
    string this[int index] { get; set; }
    event EventHandler E;
    void F(int value);
    string P { get; set; }
    }
    public delegate void EventHandler(object sender, Event e);
    /*

      例子中的界面包含一个索引、一个事件E、一个方法F和一个属性P。
      界面可以支持多重继承。就像在下例中,界面“IComboBox”同时从“ITextBox”和“IListBox”继承。

    */
    interface IControl
    {
    void Paint();
    }
    interface ITextBox: IControl
    {
    void SetText(string text);
    }
    interface IListBox: IControl
    {
    void SetItems(string[] items);
    }
    interface IComboBox: ITextBox, IListBox {}
    /*

      类和结构可以多重实例化界面。 就像在下例中,类“EditBox”继承了类“Control”,同时从“IDataBound”和“IControl”继承。
    */

    interface IDataBound
    {
    void Bind(Binder b);
    }
    public class EditBox: Control, IControl, IDataBound
    {
    public void Paint();
    public void Bind(Binder b) {...}
    }
    /*

      在上面的代码中,“Paint”方法从“IControl”界面而来;“Bind”方法从“IDataBound”界面而来,都以“public”的身份在“EditBox”类中实现。

    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/7/10 16:14:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/12/27 1:42:45

    本主题贴数5,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    72.754ms