zoukankan      html  css  js  c++  java
  • [思考]怎么在C#中加入新功能

    怎么在C#中加入功能(语法,关键词)?

    本文说的不是自定义类,函数之类的,指的是修改,增加C#的语法。

    重新开发一门新的语言,工作量太大,很难做到科学实用,而是也难以跟上C#的更新进度,所以选择扩充C#的方法,以满足专业领域的应用。

    情景一:定义一个交换运算符 <=> 实现函数 swap(a,b)的功能。上代码

    int a = 3;

    int b = 5;

    a <=> b;

    之后a,b值互换(前提是a,b两个变量是兼容类型)

    情景二:定义with关键词

    string[] fileNames;
    with(new OpenFileDialog())
    {
        .Filter = "*.txt|*.txt";
        .Multiselect = true;
        if (.ShowDialog() == DialogResult.OK)
         {
             fileNames = .FileNames;
         }
     }

     //Do(fileNames);

    上面两个例子可以显著减少临时变量的使用数量。

    思路:把增加(修改)的语法,关键词翻译成标准的C#代码,然后交给visual studio去编译处理。

    问题:

    1. 怎么在vs代码编辑器中集成这些变化的功能,例如代码智能提示,语法动态检查,代码着色。

    2. 把扩充的关键词和语法翻译成底部标准语法,利用什么接口?例如翻译后的代码保存在哪里?怎么让vs自动编译翻译后的代码,怎么处理以前和翻译后的代码的关系?

    3. 怎么在编译器中集成这个功能?例如怎么让编译针对以前的代码,给出正确的行号,正确的语法识别?

    4. 添加的功能,怎么在别的语言中应用?怎么跟VB.net互操作?

    因为mono和monoDevelopment都是开源的,修改monoDevelopment源代码的方式实现上述功能,该做哪些工作?

    如果利用visual studio来开发,利用插件,能实现么?

    DSL (domain specific language)呢?

  • 相关阅读:
    Java RunTime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse. ......
    UVA 1597 Searching the Web
    UVA 1596 Bug Hunt
    UVA 230 Borrowers
    UVA 221 Urban Elevations
    UVA 814 The Letter Carrier's Rounds
    UVA 207 PGA Tour Prize Money
    UVA 1592 Database
    UVA 540 Team Queue
    UVA 12096 The SetStack Computer
  • 原文地址:https://www.cnblogs.com/xiexiaokui/p/2016356.html
Copyright © 2011-2022 走看看