<<展现C#>> 前言(补充) 和第三章 第一个C#程序(修订)

C#使用Spire.Doc操作Word修订功能的实践指南 Word文档修订功能是团队协作编辑的核心机制,通过跟踪内容修改、格式调整和批注实现版本控制。在.NET生态中,Spire.Doc组件提供了无需依赖Office的文档处理方案,其修订操作API支持精确到单个修改项的接受/拒绝逻辑,以及批量处理等高效操作。相比OpenXML SDK的底层复杂性,这类组件封装了常用文档操作,显著提升开发效率。典型应用场景包括合同管理系统自动处理法务修订、教育平台批改作业时保留格式修订等。通过条件过滤作者、修订类型等热词相关功能,可实现智能化的文档流程自动化。实测显示,该方案处理3 阅读详情

 

前言
0.1  提要
    欢迎阅读《展现 C#》(Presenting C#)。这本书是你提高企业编程语言的一条捷径。这种企业编程语言带有下一代编程语言服务运行时(NGWS Runtime):C#(发音"C sharp")。
    NGWS Runtime 是一个不仅管理执行代码、同时也提供使编程更加容易的动态环境。编译器产生受管代码以指向这种受管理执行环境。你获得跨平台语言集成、跨平台语言异常处理、增强安全性、版本控制、安排支持和查错服务。
    支持NGWS Runtime 的主要语言是C#。支持NGWS框架的很多程序是用C#写的,因此,在一些带有NGWS Runtime的编译器中,它的编译器可以被认为是非常经得起测试且是经过优化的。C#语言借鉴了C++,但是具备现代化和新增的类型安全——使C#成为企业解决方案的首选语言。

0.2  谁应该读这本书
    如果你对编程很陌生,这本书不适合你。这本书企图让程序员解脱并使用C#,基于他们已经拥有的知识。《展现 C#》的目标瞄准了已经具有如C/C++、VB、Java或其它编程经验的程序员。
    如果你具有C++的背景,转向C#会很容易,但是,如果你精通于其它不同的语言,这本书也会耗掉你的一些日子。如果你有一点COM编程的知识,这本会更有趣,但会COM编程不再是必要的。

0.3  这本书如何组织
    第一章  C#简介——这一章把你带到C#逛一回,同时回答了有关你应该考虑学习C#的问题。
    第二章  NGWS Runtime 的技术基础——介绍NGWS Runtime为运行的C#代码所提供的低层架构。
    第三章  第一个C#应用程序——创建真正第一个C#应用程序(否则它是什么呢?),它就是一个"Hello World"应用程序。
    第四章  C#类型——可以看到用在C#应用程序中的各种类型。探索值型和引用型的区别,还有如何加框和消框。
    第五章  类——C#功能真正强大的标志,它是具有类的面向对象的编程。你会学到好多好多的东西,如构造函数、析构函数、方法、属性、索引和事件等。
    第六章  控制语句——对应用程序实行流程控制。探索C#提供的各种选择和陈述语句。
    第七章  异常处理——获得了编写实现异常处理的应用程序技巧,拥有这种技巧,在NGWS Runtime世界,你是一个好的公民
    第八章  用C#写组件——用C#构建组件,因为支持NGWS Runtime,它可以被不同语言平台的客户使用。
    第九章  配置和安排——学到如何用C#有条件地进行编译工作,和如何为你的C#源码自动地创建文档。另外,这一章将介绍到NGWS的版本技术问题。
    第十章  用非受管代码交互操作——发现你如何使用C#内部的非受管代码,且非受管代码如何与你的C#组件一起交互操作。
    第十一章  C#代码查错——获得使用SDK查错工具的技巧,可以在应用程序中准确地找到错误并修改它们。
    第十二章  安全——探索NGWS Runtime的安全概念。学到代码访问安全性和基于角色的安全性。

0.4 使用这本书你需要什么?
    从这本书的观点看,你所需要的就是下一代windows服务软件开发包(NGWS SDK)。尽管至少只要有NGWS Runtime 和C#编译器就可以,但当探索这些激动人心的新技术功能 时,在一台机器上装有说明文件档和所有的SDK工具(包括debugger),将是一个极好的主意。
    这本书不需要你装在机器上的Visual Studio 7的任何工具。我仅建议你要有一个优秀的支持行数的程序编辑器,用以编辑C#源文件。
    ……
    (省略掉一些有关出版过程和表示感谢的段落)

0.5 关于作者
    Christoph Wille,微软系统工程师(MCSE)、微软系统开发师(MCSD)、Netware网络管理员(CNA)和MCP-IT,作为一个网络咨询人员和程序员,特别精通Windows  DNA。微软认为他是ASP方面最有价值的人(MVP),他是和微软在一起使用早期的C#版本的少数开发者之一。
    Christoph 独自或参与了几本书的写作,包括Sams出版社的《自学ADO2.5  21天》、《自学ASP  24小时》、《自学MCSE TCP/IP 14天》和《MCSE 训练指南:SQL Server 7管理》。

 

第三讲     第一个C#程序

 

3.0   选择一个编辑器

    尽管我是一个顽固的Notepad狂,但这次我不建议用它编辑源码。原因是你正在与真正的编程语言打交道,使用Notepad编辑源码编译时可能产生大量的错误信息行(C++程序员知道我在说什么。)

    你有几种选择。可以重新配置你所信任的老式Visual C++ 6.0,使它能够和C#源文件一起工作。第二种选择是使用新的Visual Studio 7。第三,你可以用任何第三方程序编辑器,最好要支持行数、色彩编码、工具集成和良好的搜索功能。CodeWright就是其中一个例子,如图3.1所示。

          图3.1 CodeWright 是你可以用于创建C#代码文件众多可能编辑器中的一个(略)。

 当然,在所提到的编辑器中,没有一个对创建C#程序来说是必要的。用Notepad肯定可以编辑。但是,如果你考虑到要编写更大的项目,最好还是忍痛割爱吧。

 3.1  “Hello World”代码

    上面讨论编辑器有点离题 ,让我们把话题转回到一个非常出名的小程序。这个最短的C#版本程序见清单3.1。把它存起来(注:程序中不能含有行号),文件名为 helloworld.cs,以使你能按照说明,完成诸如编译程序等其它余下来的步骤。

         清单 3.1   最简单的 “Hello World ”程序

          1: class HelloWorld

         2: {

         3:  public static void Main()

         4:  {

         5:   System.Console.WriteLine("Hello World");

         6:  }

         7: }

 

    在C#中,代码块(语句组)由花括弧“{”和“}”所括住。所以,即使你以前没有使用C++的经验,也可以指出Main()方法就是HelloWorld 类语句的一部分,因为类被括在所定义的花括弧中。

    C#应用程序(可执行)的入口点就是 static Main 方法,它必须包含在一个类中。只有一个类能使用该标志定义,除非你告诉编译器它应使用哪一个 Main 方法(否侧,会产生一个编译错误)。

    和C++相比,Main的第一个字母是大写的M,而不是你曾经使用过的小写字母。你的程序开始于该方法,也结束于该方法。方法中可以调用其它方法——如这个例子中,用于输出文本——或者创建对象并激活该方法。

    正如你所看到的,Main方法有一个void 返回类型。

        public static void Main()

    尽管看到这些语句时,C++程序员肯定会有宾至如归的感觉,但是其他程序员并不如此。首先,public 的访问标志告诉我们这个方法可以被任何程序访问,这是它被调用的必要条件。其次,static 意味着没有先创建类的实例也可以调用方法——你所要做的就是用类名调用方法。

    HelloWorld.Main();

    但是,我不赞成在Main方法中执行这行代码,递归会导致堆栈溢出。

  另一重要的方面是返回类型。对于方法Main,可选择void (意味着根本就没有返回值),或用int 为整型结果(程序返回的错误代码)。因此,有两种可能的Main方法:

        public static void Main()

        public static int Main()

 

   C++程序员同样会明白下文我要提到的——可以传递给程序的命令行参数数组。如:

        public static void Main(string[] args)

 

    我现在并不想详细地说明如何访问参数,但我想事先给C++程序员一个警告:和C++相比,程序路径不是这个数组的一部分。仅仅那些参数包含在这个数组中。

      在对Main方法并不简短的介绍之后,让我们把注意力集中到唯一真正的代码行——这行代码在屏幕上显示“Hello Wold”。

      System.Console.WriteLine("Hello World");

      假如不是由于有了System,大家会马上猜到WriteLine是Console 对象的一个静态方法。那么System代表什么呢? 它是包含Console对象的名字空间(范围),实际上并不是每次都在Console对象前加上名字空间的前缀,你可以象清单3.2所示范的那样,在程序中引入名字空间。

 

         清单3.2   在程序中引入名字空间

         1: using System;

         2:

         3: class HelloWorld

         4: {

         5:  public static void Main()

         6:  {

         7:   Console.WriteLine("Hello World");

         8:  }

         9: }

 

    你所要做的就是给System名字空间加一个using指令。在这之后,不再需要规定名字空间,就可以使用它们的方法和属性了。NGWS 框架体系中有很多的名字空间,我只对巨大的名字空间池中的少数几个对象进行探讨。但在第八章 “用C#写组件”将介绍如何为你的对象创建自己的名字空间。

 

3.2  编译程序

    由于NGWS  Runtime支持所有的编译器(VB、C++和C#),你不必买一个单独的开发工具用来把应用程序编译成IL(中间语言)。但是,如果你从没有使用命令行编译器编译过程序(仅懂得编译名,而没有熟记), 它还是你的首要选择。

    打开命令提示符并切换到存放helloworld.cs 的目录。敲入以下命令:

        csc helloworld.cs

 

    helloworld.cs 被编译并链接成hellworld.exe。因为源码没有错误(那当然)! C#编译器没有出错提示,在整个编译过程没有丝毫停顿。如图3.2所示。

 

         图3.2  使用命令行编译器 csc.exe 编译应用程序

 

    现在你已经准备好运行第一个真正用C#编写的程序。简单地在命令行上敲入helloworld,输出结果为 “Hello World”。

   在继续往下介绍之前, 我想简单地说明一下编译器开关的一个用法:

        csc /out:hello.exe helloworld.cs

    这个开关告诉编译器输出文件命名为hello.exe。虽然这不是什么绝招,但它是以后这本书中用到的编译器的基本功。

 

3.3  输入和输出

    到目前为止,我仅仅演示了把简单的常量字符串输出到屏幕。尽管这本书只介绍了C#编程的概念而不介绍用户接口编程,但我想使你能迅速掌握简单的控制台输入和输出方法——相应于C的scanf 和 printf,或者C++的cin 和cout。我不能提供VB相应的函数,因为控制台访问不是该核心语言的一部分。

    你只需要能够读取用户的输入,并提示一些信息给用户。清单3.3 说明如何读取一个用户请求的名字输入,并显示一条已定制的“Hello”信息。

 

         Listing 3.3 从控制台读输入信息

 

         1: using System;

         2:

         3: class InputOutput

         4: {

         5:  public static void Main()

         6:  {

         7:   Console.Write("Please enter your name: ");

         8:   string strName = Console.ReadLine();

         9:   Console.WriteLine("Hello " + strName);

         10:  }

         11: }

 

     第7行使用Console对象的一个新方法,用于向用户提示文本信息,它就是Write方法。它与WriteLine不同的地方在于它输出时不换行。使用这种方法以便用户可以在信息提示的同一行输入名字。

    在用户输入他的名字后(并按回车键),ReadLine 方法读入了一个字符串变量。名字字符串连接到常量字符串“Hello”,并用我们早已熟悉的WriteLine方法显示出来(见图3.3)

 

        图3.3  编译和运行定制的Hello 应用程序

 

    你几乎已学完了NGWS框架必要的输入和输出函数。但是,你还需要为用户显示多个值。为用户写一个格式串。清单3.4显示一个例子。

 

        清单 3.4 使用不同的输出方法

 

        1: using System;

        2:

        3: class InputOutput

        4: {

        5:  public static void Main()

        6:  {

        7:   Console.Write("Please enter your name: ");

        8:   string strName = Console.ReadLine();

        9:   Console.WriteLine("Hello {0}",strName);

        10:  }

        11: }

 

    第9行包含了使用格式串的Console.WriteLine语句。格式串例子如下:

        "Hello {0}"

    {0}代替WriteLine方法的参数表中紧随格式串后的第一个变量。你可以用该技术格式化不超过三个变量。

        Console.WriteLine("Hello {0} {1}, from {2}",

         strFirstname, strLastname, strCity);

 

   当然,并不仅限于只使用字符串变量。你可以使用任何类型,这些类型在后面的第四章“C#类型”中有讨论。

 

3.3 添加注释

    当编写代码时,你应为代码写注释条文,解释实现的内容、变更史等。尽管你注释中提供的信息(如果有的话)是写给自己看的,但是你还是必须遵守写C#注释的方法。清单3.5 显示所采用的两种不同的方式。

 

        清单3.5  给代码添加注释

 

         1: using System;

         2:

         3: class HelloWorld

         4: {

         5:  public static void Main()

         6:  {

         7:   // 这是单行注释

         8:   /* 这种注释

         9:   跨越多行 */

        10:   Console.WriteLine(/*"Hello World"*/);

        11:  }

        12: }

 

   “//” 符号用于单行注释。你可以用“//”注释当前所在行,或是跟在一个代码语句的后面:

        int nMyVar = 10; // 胡说八道

    所有在“//”之后的字符被认为是一条注释;所以,你可以同样用它们来注释一整行代码或一行中的部分代码。这种注释方式同C++中介绍的相似。

    如果你的注释跨越多行,必须使用“/* */”这对符号组合。这种方式在C中有效。除了单行注释外,这种方式在C++和C#中还同样有用。因C/C++和C#都使用这种多行注释方式,所以它们也使用相同的结束符。请看下列代码行:

        /* Console.WriteLine("Hello World"); */

 

    我利用“/* */”简单地注释一整行。现在我假定这一行是很长代码的一部分,而且我决定要暂时禁用一个程序块:

        /*

        ...

        /* Console.WriteLine("Hello World"); */

        ...

        */

 

     这种结构所存在的问题为: “Hello World”那一行后面的“*/”终止了始于第一行的“/*”的注释,余下的代码对编译器有效,你将看到一些有趣的出错信息。至少最后的“*/”被标志为归属错误。我只想顺便提醒你,让你注意这种错误。

 

3.4 小结

    在这一章中,你创建、编译并执行了第一个C#程序:著名的“Hello World”程序。我利用这个简短的程序为你介绍了有关Main方法,它是一个程序的入口点,也是出口点。该方法可以没有返回值或返回一个整数错误代码。如果你的程序用参数调用,你可以(但不必要)读取并使用它们。

    在编译和测试程序之后,你学到了更多的由Console对象提供的有关输入和输出的方法。对于学习C#而言,它们足以创建出有意义的控制台程序,而用户接口的大部分将用于WFC、WinForms或者ASP+。

在C#中接受或拒绝Excel中的修订(.NET) EPPlus是一个开源库,它提供了一组丰富的API,用于读取、写入和处理Excel文件。在C#中,我们可以使用.NET库来读取和处理Excel文件,并且可以接受或拒绝修订。这就是使用C#和.NET接受或拒绝Excel中的修订的基本步骤。通过使用EPPlus库,您可以轻松地读取和处理Excel文件中的修订。假设我们有一个名为"Sample.xlsx"的Excel文件,其中包含修订。在上面的示例代码中,我们首先指定Excel文件的路径。根据您的需求,您可以选择接受或拒绝修订。方法可以接受所有的修订,使用。 阅读详情

相关推荐

第01章 第一个C#程序

C#程序设计课件,用简单的一个程序给学习者开始讲解C#课程,适用于初学者。

C#语言 第一章 第一个C#程序

第一章 第一个C#程序 C#程序 ①:建立项目:文件–&amp;gt;新建–&amp;gt;项目–&amp;gt;c#–&amp;gt;控制台程序(项目名/文件存储位置)–&amp;gt;确定 ①:c#程序 namespace:命名空间; 相当于java中的package(声明包) using:引用其他命名空间;相当于java中的import 注意!!但using只能写到包,不能写到类名 Main()方法:程...

九之者 1112

ETAP实战:如何用仿真软件快速绘制标准一次接线图(附模板下载)

本文提供了一套基于ETAP软件高效绘制标准一次接线图的完整实战工作流。从国标符号库配置、绘图模板创建,到核心设备绘制、参数标注,再到利用软件模型进行拓扑检查与短路电流校核,手把手教你实现从零到一的专业图纸设计。文末附有实用模板下载,助你大幅提升电力设计效率与图纸质量。

weixin_29291573的博客 510

<<展现C#>> 第八章 用C#写组件(修订)

第八章    用C#写组件 这一章关于用C#写组件。你学到如何写一个组件,如何编译它,且如何在一个客户程序中使用它。更深入一步是运用名字空间来组织你的应用程序。这章由两个主要大节构成:。你的第一个组件。使用名字空间工作 8.1  你的第一个组件 到目前为止,在本书中提到的例子都是在同一个应用程序中直接使用一个类。类和它的使用者被包含在同一个执行文件中。现在我们

rainbow的专栏 1632

【GD32篇】驱动AD7616完成数据采集

GD32F10X驱动AD7616完成数据采集

we_long的博客 1万+

DCN交换机通过boot模式升级

LIC导入成功后,输入enable进入特权模式,把网线接到通讯网口上,配置好对应interface vlan地址,在enable模式用 copy tftp://x.x.x.x/xxxxxx_nos.img nos.img待提示write ok时,reload设备完成升级。交换机启动后,在显示以下信息时输入“Ctrl+B”,一定得是手动按“Ctrl+B”进入的boot模式才能正常升级。升级交换机成功,在BootROM模式下,执行命令run或reboot,回到CLI配置界面。# 交换机通过boot模式升级。

m0_72501865的博客 946

<<展现C#>>第四章 C#类型(修订)

 第四章        C#类型     既然你已经知道如何创建一个简单的C#程序,那么我将会给你介绍C#的类型系统。在这一章中,你学到如何使用不同的值和引用类型,加框和消框机制能为你作些什么。尽管这一章的并不侧重于例子,但你还可以学到很多重要的、关于如何使用现成类型创建程序的知识。4.1 值类型 各种值类型总是含有相应该类型的一个值。C#迫使你初始化变量才能使用它们进行

rainbow的专栏 1585

PyTorch GPU版本安装避坑指南:解决RuntimeError: No CUDA GPUs are available报错

本文详细解析了PyTorch GPU版本安装过程中常见的`RuntimeError: No CUDA GPUs are available`报错问题,从硬件驱动检查、CUDA Toolkit与cuDNN安装到PyTorch GPU版本的正确配置,提供了全面的避坑指南和实战验证方法,帮助开发者高效搭建深度学习开发环境。

r2s3t4的博客 296

<<展现C#>>第六章 控制语句(修订)

                                  第六章   控制语句      有一种语句,你在每种编程语言控制流程语句中都可以找到。在这一章中,我介绍C#的控制语句,它们分为两个主要部分:。选择语句。循环语句如果你是C或C++程序员,很多信息会让你感到似曾相似;但是,你必须知道它们还存在着一些差异。  6.1 选择语句    当运

rainbow的专栏 1559

LVGL 组件对齐方式说明

本文说明 LVGL(以 v8 为例)中常用的 lv_align_t对齐选项的含义与用法,对应界面设计工具里下拉列表中的以及等命名。

摸鱼专家 130

(第100天)Oracle GoldenGate 常见故障处理指南

OGG 运维的核心在于细致的配置管理和主动的问题排查。熟悉常见错误、掌握关键操作流程、并善用日志和调试工具,是保障数据同步任务稳定运行的关键。希望这份指南能帮助您更高效地解决 OGG 同步中遇到的问题。祝您运维顺利!

LuciferLiu_DBA 301

<<展现C#>> 第二章 NGWS Runtime 技术基础(修订)

                   第二章  NGWS  runtime 技术基础     既然你已经具有了C#全面的印象,我也想让你领略NGWS runtime的全貌。C#依靠由NGWS提供的运行时;因此,有必要知道运行时如何工作,以及它背后所蕴含的概念。    所以,这一章分为两部分——它们是所有的概念和应用的基础。两部分的内容虽然有些重叠,但有助于加深理解正在学习的

rainbow的专栏 2131

<<展现C#>> 第七章 异常处理(修订)

     第七章   异常处理     通用语言运行时(CLR)具有的一个很大的优势为异常处理是跨语言被标准化的。一个在C#中所引发的异常可以在Visual Basic客户中得到处理。不再有 HRESULTs  或者 ISupportErrorInfo 接口。    尽管跨语言异常处理的覆盖面很广,但这一章完全集中讨论C#异常处理。你稍为改变编译器的溢出处理行为,接着有趣的事情就

rainbow的专栏 1417

在 MATLAB/Simulink 中构建一个卫星间激光通信链路的完整仿真系统

摘要: 本文通过Simulink详细演示了卫星间激光通信系统的建模过程,重点分析其在10Gbps高速率、2000km距离下的性能。系统设计涵盖PAM-4调制、自由空间信道建模(路径损耗、指向误差、多普勒效应)、APD探测及链路预算计算,并给出典型场景下18.5dB SNR、1e-9误码率的仿真结果。针对激光通信的μrad级指向精度挑战,提出AI辅助跟踪、混合RF/激光等优化策略,为未来太空高速组网提供可扩展的仿真框架。所需工具箱包括Communications Toolbox和Aerospace Toolb

xiaoheshang_123的博客 382

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

<<展现C#>> 第五章 类(修订)

 第五章  类      前一章讨论了数据类型和它们的用法。现在我们转移到C#中至关重要的结构——类。没有了类,就连简单的C#程序都不能编译。这一章假定你知道了一个类的基本组成部分:方法、属性、构造函数和析构函数。 C#在其中增加了索引和事件。      在这一章中,你学到下列有关类的话题。      。 使用构造函数和析构函数      。给类写方法      。给一个类增加属性存取标志   

rainbow的专栏 1504

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

c#取消word修订痕迹_打印修订的Word文档时怎样兼顾修订痕迹和文档外观美感?...

您好,欢迎来到【爆炒Office】,这里有原创的实用办公软件技巧。着手工作实际,解决办公问题。概述如果Word文档被添加上了修订,当执行打印的时候,如果使用默认设置,那么,修订内容也会被打印出来,打印的效果非常不美观,因为修订内容占据了页面的一小半边,正文就被缩小了。如下图所示。_这个问题有没有比较好的解决办法呢?本文讲解一下自己的经验。_第1种方法:选择接受修订,无需打印出修订痕迹点击接受所有修...

weixin_39758953的博客 1820

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

c#打开和关闭word修订模式

打开修订模式 Application docapplication = new Application() { Visible = false }; docapplication.Options.SaveInterval = 0; var doc = docapplication.Documents.Open(Dfileurl); doc.TrackRevisions = true; d...

顺其自然~专栏 1824

接收word里面的修订,使word显示时不会出现修订的痕迹

using Microsoft.Office.Interop.Word;using Microsoft.Office.Core;using System.Diagnostics;  ///         /// 接收word里面的修订,使word显示时不会出现修订的痕迹        ///         /// 文件路径        ///       

3726

C# 程序集和版本控制介绍

C# 程序集作为.NET 应用程序的核心构建块,负责代码的组织、部署和版本控制。通过合理地使用程序集和版本控制机制,开发者可以实现代码的模块化、重用和安全性,构建出更加健壮、可维护的应用程序。无论是开发小型的桌面应用程序,还是大型的企业级分布式系统,理解和掌握 C# 程序集和版本控制的知识,都是非常必要的。希望通过本文的介绍,能帮助你对 C# 程序集和版本控制有更深入的理解和认识。

zsnandzmn的博客 1554

<展现 C#> 第一章 C#简介(修订)

                            第一章  C#简介     欢迎你加入C#(念C sharp)的世界! 这一章将让你了解C#,并回答一些相关的问题,如:你为什么要使用C#,C++和C#主要有什么不同的地方,以及为什么C#使软件开发更容易而且还更有趣。1.1 为什么是另外一种编程语言?    你必须回答的一个问题:当已经使用C++或VB从事企业开发时,为

rainbow的专栏 1829

c#打开关闭office的修订模式

1、打开word 的修订模式 Application docapplication = new Application() { Visible = false };                             docapplication.Options.SaveInterval = 0;                             var doc = docappl...

wlliloveshan的博客 1419

C# Word操作 "公文留痕" 之 修订操作者

1.Word自身的修订历史记录功能----------------------------a.打开和查看  Word-视图-工具栏-审阅   可以通过打开的审阅工具栏的相关功能 进行  “显示标记的最终状态” “最终状态”等查看b.设定标记等相关样式  Word-工具-选项-修订  可以设定相关标记样式  2.设定公文修订者信息为本系统中的人员---------------------

freeliver54的专栏 1718

C#使用Spire.Doc自动化处理Word文档修订

Word文档修订功能是团队协作中的关键技术,它通过记录内容修改痕迹实现多人协同编辑。在.NET开发中,利用C#编程可以高效处理文档修订,实现自动化审批流程。Spire.Doc作为轻量级.NET组件,相比微软Interop方案具有无需安装Office、跨平台等优势,特别适合服务器端文档处理。通过代码示例演示如何获取修订集合、批量接受/拒绝修订、生成对比报告等核心操作,这些技术在合同审批、论文修改等场景中能显著提升工作效率。结合Spire.Doc的优化加载和大文档处理能力,开发者可以构建稳定的企业级文档自动化系

weixin_34005090的博客 188

使用C#代码在 Excel 中接受或拒绝修订内容

当您将 Excel 文档发送给他人进行审阅时,建议开启“修订”功能,以确保对工作表或工作簿所做的所有更改都被记录下来。对于已修改的单元格,Excel 会在单元格左上角显示一个蓝色三角形作为标记。您可以查看这些更改,并决定是否接受或拒绝它们。本文将演示如何使用 Spire.XLS for .NET 以编程方式在 Excel 工作簿中接受或拒绝所有修订内容。

2501_93070778的博客 214

C#设计模式前言

C#设计模式(1) http://www.cnblogs.com/zhenyulu/articles/36058.aspx 课本:《C#设计模式》,电子工业出版社,ISBN 7-5053-8979-3。33元含光盘。 课程内容:设计模式 来源:亚历山大的建筑模式、Gamma等人(1995)创作的"Design Patterns: Elements of Reusable Software

jiangxinyu的专栏 1734
上一篇: <<展现C#>> 第二章 NGWS Runtime 技术基础(修订)
下一篇: <<展现C#>>第四章 C#类型(修订)
rainbow
博客等级 码龄27年 3粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值