首页 > 开发 > 综合 > 正文

what is new in c sharp 2.0--study from msdn

2024-07-21 02:17:45
字体:
来源:转载
供稿:网友

http://www.microsoft.com/china/msdn/library/langtool/vcsharp/vbconcprogramminglanguagefuturefeatures.mspx
1. generic type 泛型
  定义一个mylist<t>,对这个mylist类设定方法,方法中,使用t而不是具体的类型float或者int什么的,忽略了类型的区别
 mylist<myclass> list1  = new mylist<myclass>();
 mylist<float> list2 = new mylist<float>();
 mylist<somestruct> list3 = new mylist<somestruct>();
  可以使用在class、struct和interface
  可以在模板的定义中,具体的定义t属于的类型,
 where t : struct   t是value type
 where t : class   t是reference type
 where t : new()   t具有一个无参数的构造函数
 where t : <base class name>  t必须是base class name设定的类或者是他的继承类
 where t : <interface name>  t必须是interface name设定的接口或者它的实现类
  我的疑问是,这个generic type的意义何在?如果说忽略了类型,可是,如果没有类型设定,那么t就是object,只能够调用很少的一些方法,如果设定了类型,那么为什么我不直接写呢?何必还要绕一个圈子呢?
  我的回答是,
      第一,对于list<>这样的泛型,如果不使用泛型,要达到目的,就要使用一个array或者是list,如果是array,那么长度就是限定的,不是动态的,这不好,如果是list,那么类型是不知道的,需要在程序中进行编码进行转换,所以,使用了泛型,对么?
      第二,还是保证了一种类型上面的忽略,算法的统一

2. interator 迭代
  interator是一个方法,允许foreach在类上进行操作,iterator代码定义了foreach循环遍历集合中的元素时的返回类型。
  避免了如果一个collection要支持foreach循环必须实现system.collections.ienumerable或者system.collections.ienumerator
  yield return, 返回值必须是system.collections.ienumerable或者system.collections.ienumerator

3. anonymous method 匿名方法
   btnok.click += delegate{messagebox.show("ok")}
   btnok.click += new eventhandler(object sender, eventargs e)
   {
 messagebox.show(sender.tostring());
   }
  有点把一段代码作为参数传递给delegate
  这可就方便了在runtime设定运行代码,外部脚本,注入啊,reject

4. partial class 局部类
   一个类,可以在一个assembly或者module(exe/dll)的各个cs文件中被不断的补充、定义,这很方便于多个开发员的开发,对于一个存在于几个人写的类中,partial class还是很有用的,每个人都可以根据自己的需求对partial class进行补充扩展
   需要注意的是,第一,只能够在一个assembly或者module中;第二,不能够声明的方式不统一

5. nullable types 空类型
   声明的方式可以是
    int? x;
    system.nullable x;
   很有用,例如,对于db中的一个field如果要赋值为空,现在的写法可能是***.value = null;可是这样子对于需要根据情况进行判断是有值还是为空的时候,就需要写两行代码来完成,很罗嗦,麻烦,有了nullable types就方便了
    int? x = null;
    int y = 10;
    if (chk.checked == true)
    {
       x = y;
    }
    else
    {
       x = null;
    }
    ***.value = x;

6. :: operator ::操作符
   很有意思的一个东西,其中引入了global关键字,看看就可以了
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表