博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
what is new in c sharp 2.0--study from msdn [转]
阅读量:5757 次
发布时间:2019-06-18

本文共 1931 字,大约阅读时间需要 6 分钟。

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

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关键字,看看就可以了

转载地址:http://xdvkx.baihongyu.com/

你可能感兴趣的文章
Javascript 深入浅出原型
查看>>
VS 2019要来了,是时候了解一下C# 8.0新功能
查看>>
简单之极,搭建属于自己的Data Mining环境(Spark版本)
查看>>
Web Storage--HTML5本地存储
查看>>
数据库自动化:DBA和DevOps的双赢
查看>>
Ruby 2.5.0概览
查看>>
如何通过解决精益问题提高敏捷团队生产力
查看>>
阿里云数据库产品总监何云飞:云服务是影响未来10~20年的事
查看>>
Comment2Wechat —— Typecho 插件
查看>>
Apache下.htaccess文件配置及功能介绍
查看>>
Magento XML cheatsheet
查看>>
Egg 2.19.0 发布,阿里开源的企业级 Node.js 框架
查看>>
SegmentFault for Android —— 夜晚中的思考者
查看>>
sap的function module发布成web service后fm再次修改的处理 ...
查看>>
Kubernetes 弹性伸缩全场景解析 (四)- 让核心组件充满弹性 ...
查看>>
使用MySQLTuner-perl对MySQL进行优化
查看>>
ubuntu18.10手动安装mysql5.5
查看>>
SAP S/4HANA extensibility扩展原理介绍
查看>>
Swoole 4.1.0 正式版发布,支持原生 Redis/PDO/MySQLi 协程化 ...
查看>>
开发网络视频直播系统需要注意的地方
查看>>