• 亲密接触C# 4.0


      花了两个晚上,终于看完了New features in CSharp 4.0.docx。最大的感触是动态语言编程和COM的互操作性上游很大的变化。前者将是C#具备python和ruby的语言特性,后者将更好支持office编程。

      很多地方都没有看的很明白,需要进一步深入的学习。我会不定期更新此文章。

    第一个主题:最大的变化是具备了动态语言的特征。

    重点有以下几个方面:

    Ø 动态编程语言对象

    Ø 通过IDispatch来获取COM对象

    Ø 通过反射获取.Net类型

    Ø 对象结构的变化,类似于HTML DOM对象

    C#在保留静态语言的同时,更好的实现对象的交互。

    第二个主题:与VB保持共同进化。

    C#4.0新特性

    动态查询

    被命名的和可选参数

    COM特定的互操作特性

    灵活性

    动态查询

    动态类型

    动态操作符

    运行时查询

    COM对象

    动态对象

    普通对象

    过度的解析动态参数

    动态语言运行时

    当前进度6页

    现存问题

    不能使用LINQ来查询动态对象。由于lambda不能作为参数传递给动态操作。

    指定参数和任意参数

    COM互操作特性

    动态引用

    NO PIAS 编译

    这个功能将提高代码的编译效率,减少程序集加载做占用的内存。可参考张羿的webcast<<.NET 4.0中的新特性系列课程(1):等价类型(Type Equivalency)(>>

    略去ref

    逆变

    Func<object,string> 可以这样用: Func<string,object>.

    局限

    IEnumerable<int>不等同于 IEnumerable<object>。因为从整型转换为对象是装箱操作,而不是引用变换。

    三 文档最后的实例

    我从word档拷贝到VS2010 BETA2上代码出现的问题:

    var processes = Process.GetProcesses()
                .OrderByDescending(p
    &gt; p.WorkingSet)
                .Take(10);

    解决办法:小于号"<"替换成"&lt",大于号">"替换成"&gt"。即.OrderByDescending(p => p.WorkingSet)

    3.1 新建console类型的项目

    完整的代码:

     1using System;
     2using System.Diagnostics;
     3using System.Linq;
     4using Excel = Microsoft.Office.Interop.Excel;
     5using Word = Microsoft.Office.Interop.Word;
     6namespace ConsoleApplication1
     7{
     8    class Program
     9    {
    10        static void Main(string[] args) {
    11            var excel = new Excel.Application();
    12        excel.Visible = true;
    13        excel.Workbooks.Add();                    // optional arguments omitted
    14        excel.Cells[11].Value = "Process Name"// no casts; Value dynamically  
    15        excel.Cells[12].Value = "Memory Usage"// accessed
    16        var processes = Process.GetProcesses()
    17            .OrderByDescending(p => p.WorkingSet)
    18            .Take(10);
    19        int i = 2;
    20        foreach (var p in processes) {
    21            excel.Cells[i, 1].Value = p.ProcessName; // no casts
    22            excel.Cells[i, 2].Value = p.WorkingSet;  // no casts
    23            i++;
    24        }

    25        Excel.Range range = excel.Cells[11];       // no casts
    26        Excel.Chart chart = excel.ActiveWorkbook.Charts.
    27            Add(After: excel.ActiveSheet);         // named and optional arguments
    28        chart.ChartWizard(
    29            Source: range.CurrentRegion,
    30            Title: "Memory Usage in " + Environment.MachineName); //named+optional
    31        chart.ChartStyle = 45;
    32        chart.CopyPicture(Excel.XlPictureAppearance.xlScreen,
    33            Excel.XlCopyPictureFormat.xlBitmap,
    34            Excel.XlPictureAppearance.xlScreen);
    35        var word = new Word.Application();
    36        word.Visible = true;
    37        word.Documents.Add();          // optional arguments
    38        word.Selection.Paste();
    39    }

    40    }

    41}

     

    3.2 添加引用

    在COM标签中添加“Microsoft Excel 11.0 Object Library”的引用。

  • 相关阅读:
    ORM是什么?
    mysql 杂谈
    IO model之IO多路复用的触发方式
    IO model之select poll epoll IO多路复用介绍
    IO model
    事件驱动模型介绍
    函数
    商品程序
    随机生成密码
    import radom 和import string
  • 原文地址:https://www.cnblogs.com/mingle/p/1600587.html
Copyright © 2020-2023  润新知