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

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

 

第四章        C#类型

     

既然你已经知道如何创建一个简单的C#程序,那么我将会给你介绍C#的类型系统。在这一章中,你学到如何使用不同的值和引用类型,加框和消框机制能为你作些什么。尽管这一章的并不侧重于例子,但你还可以学到很多重要的、关于如何使用现成类型创建程序的知识。

4.1 值类型

各种值类型总是含有相应该类型的一个值。C#迫使你初始化变量才能使用它们进行计算——变量没有初始化不会出问题,因为当你企图使用它们时,编译器会告诉你。

每当把一个值赋给一个值类型时,该值实际上被拷贝了。相比,对于引用类型,仅是引用被拷贝了,而实际的值仍然保留在相同的内存位置,但现在有两个对象指向了它(引用它)。C#的值类型可以归类如下:

·简单类型(Simple types )

·结构类型(struct types)

·枚举类型(Enumeration types)

4.1.1  简单类型

     在C#中出现的简单类型共享一些特性。第一,它们都是.NET系统类型的别名。第二,由简单类型组成的常量表达式仅在编译时而不是运行时受检查。最后,简单类型可以按字面被初始化。以下为C#简单类型归类:

 ·整型

 ·布尔型

 ·字符型 (整型的一种特殊情况)

 ·浮点型

 ·小数型

 

4.1.1.1  整型

     C#中有9个整型。 sbyte 、byte、 short、 ushort、 int、 uint、 long、 ulong 和 char(单独一节讨论)。它们具有以下特性:

 

·sbyte型代表有符号8位整数,取值范围在-128~127之间。    

·bytet型代表无符号16位整数,取值范围在0~255之间。

·short型代表有符号16位整数,取值范围在-32,768~32,767之间。

·ushort型代表无符号16位整数,取值范围在0~65,535之间。

·int型代表有符号32位整数,取值范围在-2,147,483,648~ 2,147,483,647之间。

·uint型代表无符号32位整数,取值范围在  0 ~ 4,294,967,295之间。

·long型代表64位有符号整数,取值范围在-9,223,372,036,854,775,808~ 9,223,372,036,854,775,807之间。

·ulong型为64位无符号整数,取值范围在0 ~ 18,446,744,073,709,551,615之间。

 

    VB和C程序员都可能会对int和long数据类型所代表的新范围感到惊讶。和其它的编程语言相比,在C#中,int不再取决于一个机器的字(word)的大小,而long被设成64位。

 

4.1.1.2  布尔型

    布尔数据类型有true和false两个布尔值。可以赋true或false值给一个布尔变量,也可以把一个表达式赋给变量,其值等于表达式所求出的值:

bool bTest = (80 > 90);

    与C和C++相比,在C#中,true值不再为任何非零值。不要为了增加方便而把其它整型转换成布尔型。

 

4.1.1.3  字符型

    字符型为一个单Unicode 字符。一个Unicode字符16位长,它可以用来表示世界上大多数的语言。可以按以下方法给一个字符变量赋值:

char chSomeChar = 'A';

  除此之外,可以通过十六进制转义符(前缀/x)或Unicode表示法给变量赋值(前缀/u):

char chSomeChar = '/x0065';

char chSomeChar = '/u0065';

    不存在把char转换成其它数据类型的隐式转换。这就意味着,在C#中把一个字符变量当作另一个整数数据类型看待是行不通的——这是C程序员必须改变习惯的另一个方面。但是,可以运用显式转换:

char chSomeChar = (char)65;

int nSomeInt = (int)'A';

    在C中仍然存在着转义符(字符含义)。要换换脑筋,请看表4.1。

 

Table 4.1 转义符( Escape Sequences)

转义符    

字符名

/'  

单引号

/"

双引号

//

反斜杠

/0

空字符

/a

感叹号

/b   

退格

/f

换页

/n

新行

/r

回车

/t 

水平 tab

/v   

垂直tab

 

 

 

 

 

4.1.1.4  浮点型

两种数据类型被当作浮点型:float和double。它们的区别在于取值范围和精度:

    float: 取值范围在 1.5x10-45~ 3.4x1038之间, 精度为7位数。

    double: 取值范围在 5.0x10-324 ~ 1.7x10308之间, 精度为 15~16 位数。

    当用两种浮点型执行运算时,可以产生以下的值:

    正零和负零

    正无穷和负无穷

    非数字值(Not-a-Number,缩写NaN)

    非零值的有限数集

    另一个运算规则为,当表达式中的一个值是浮点型时,所有其它的类型都要被转换成浮点型才能执行运算。

 

4.1.1.5   小数型(The decimal Type)

    小数型是一种高精度、128位数据类型,它打算用于金融和货币的计算。它所表示的范围从大约1.0x10-28 到 7.9x1028,具有28至29位有效数字。要注意,精度是以十进制位数      (digits)表示,不是小数位(decimal places)。运算最多精确到小数点后28位。

    正如你所看到的,decimal的取值范围比double的还窄,但它更精确。因此,没有decimal和double之间的隐式转换——往一个方向转换可能会溢出,往另外一个方向可能会丢失精度。你不得不运用显式转换。

    当定义一个变量并赋值给它时,使用 m 后缀以表明它是一个小数型:

    decimal decMyValue = 1.0m;

    如果省略了m,在变量被赋值之前,它将被编译器认作double型。

 

4.1.2  结构类型

     一个结构类型可以声明构造函数、常数、静态字段、方法、属性、索引、操作符和嵌套类型。尽管列出来的功能看起来象一个成熟的类,但在C#中,结构和类的区别在于结构是一个值类型,而类是一个引用类型。与C++相比,这里可以用结构关键字定义一个类。

   使用结构的主要思想是用于创建小型的对象,如Point和FileInfo等等。你可以节省内存,因为没有如类对象所需的那样有额外的引用产生。例如,当声明含有成千上万个对象的数组时,这会引起极大的差异。

     清单4.1  包含一个命名为IP的简单结构,它表示一个使用byte类型的4个字段的IP地址。这里不包含方法等,因为这些工作正如使用类一样,将在下一章有详细的描述。

 

清单4.1   定义一个简单的结构

 

 1: using System;

 2:

 3: struct IP

 4: {

 5:  public byte b1,b2,b3,b4;

 6: }

 7:

 8: class Test

 9: {

10:  public static void Main()

11:  {

12:   IP myIP;

13:   myIP.b1 = 192;

14:   myIP.b2 = 168;

15:   myIP.b3 = 1;

16:   myIP.b4 = 101;

17:   Console.Write("{0}.{1}.",myIP.b1,myIP.b2);

18:   Console.Write("{0}.{1}",myIP.b3,myIP.b4);

19:  }

20: }

 

4.1.3  枚举类型

    当你想声明一个由一个指定常量集合组成的独特类型时,枚举类型正是你要寻觅的。最简单的形式,它看起来可能象这样:

    enum MonthNames { January, February, March, April };

因我惯用缺省设置,故枚举元素是int型,且第一个元素为0值。每一个连续的元素按1递增。如果你想给第一个元素直接赋值,可以如下把它设成1:

enum MonthNames { January=1, February, March, April };

    如果你想赋任意值给每个元素——甚至相同的值——这同样没有问题:

    enum MonthNames { January=31, February=28, March=31, April=30 };

    最后的选择是不同于int的数据类型。可以在一条语句中按如此赋值:

    enum MonthNames : byte { January=31, February=28, March=31, April=30 };

    你可以使用的类型仅限于long、int、short和byte。

 

4.2   引用类型

    和值类型相比,引用类型不存储它们所代表的实际数据,但它们存储实际数据的引用。在C#中提供以下引用类型给你使用:

·对象类型

·类类型

·接口

·代表元

·字符串类型

·数组

 

4.2.1  对象类型

    对象类型是所有类型之母——它是其它类型最根本的基类。因为它是所有对象的基类,所以可把任何类型的值赋给它。例如,一个整型:

    object theObj = 123;

    给所有的C++程序员一个警告:object并不等价于你可能正在寻找的void*。无论如何,忘掉指针总是个好主意。

    当一个值类型被加框(作为一个对象利用)时,就用到对象类型。这一章稍后会讨论到加框和消框

 

4.2.2   类类型

    一个类类型可以包含数据成员、函数成员和嵌套类型。数据成员是常量、静态字段和事件。函数成员包括方法、属性、索引、操作符、构造函数和析构函数。类和结构的功能是非常相似的,但正如前面所述,结构是值类型而类是引用类型。

    和C++相比,仅允许单继承。(你不能拥有派生一个新对象的多基类。)  但是,C#中的一个类可以派生自多重接口,该接口在下一节将得到描述。

    第五章 “类”专门讨论使用类编程。这一节仅打算给出C#类适合类型图的概况。

 

4.2.3  接口

     一个接口声明一个只有抽象成员的引用类型。跟C++中相似的概念,是一个结构的成员,且方法等于0。如果你一点都不了解这些概念,这里就是在C#中一个接口实际所做的。它只有方法名,但根本就没有执行代码。这就暗示了不能实例化一个接口,只能实例化一个派生自该接口的对象。

可以在一个接口中定义方法、属性和索引。所以,对比一个类,接口有什么特殊性呢?当定义一个类时,可以派生自多接口,而你可以从仅有的一个类派生。

    你可能会问:"OK,但我必须实现所有的接口成员,那么我能从这个途径得到什么呢?" 我想举一个来自.NET的例子:很多类实现了IDictionary 接口。你可以使用简单的类型转换访问接口:

IDictionary myDict = (IDictionary)someobjectthatsupportsit;

    现在你的代码可以访问字典了。可等等,我说很多类可以实现这个接口——所以,你可以在多个地方重用代码来访问IDictionary 接口!一旦学会,任何地方都可使用。

    当你决定在类设计中使用接口时,学习更多关于面向对象的设计是个好主意。这本书不能教你这些概念,但你可以学习如何创建接口。以下的代码段定义接口IFace,它只有一个方法:

interface IFace

{

 void ShowMyFace();

}

    正如我所提到的,不能从这个定义实例化一个对象,但可以从它派生一个类。因此,该类必须实现ShowMyFace抽象方法:

class CFace:IFace

{

 public void ShowMyFace()

 {

  Console.WriteLine("implementation");

 }

}

 

接口成员和类成员的区别在于,接口成员不能被实现。因此,我不想在下一章中再次提到这一点。

 

4.2.4  代表元

代表元封装了具有某些名字的方法。基本上,代表元是类型安全和函数指针的安全版本(回调功能)。可以同时在一个代表元实例中同时封装静态和实例方法。

尽管你可以用代表员当作具有方法,但它们的主要用途是拥有一个类事件。再次,我想把你引到下一章,那里会详细地讨论类。

4.2.5  字符串类型

C程序员可能会诧异,但当然,C#有一个用于操作字符串数据的基本字符串类型。字符串类直接派生自对象,且它是被密封的,这意味着再不能从它派生类。就象其它类型,字符串是预定义类System String的一个别名。

它的用法十分简单:

string myString = "some text";

合并字符串同样简单:

string myString = "some text" + " and a bit more";

而如果你想访问单个字符,所要做的就是访问下标:

char chFirst = myString[0];

当比较两个字符串是否相等时,简单地使用"=="比较操作符。

if (myString == yourString) ...

我只想提一下,尽管字符串是一个引用类型,但比较时是比较值,而不是比较引用(内存地址)。

这本书的每一个例子中,几乎都用到了字符串类型,而且在这些例程中,我会介绍给你一些由字符串对象所揭示的极其有趣的方法。

 

4.2.6  数组

一个数组包含有通过计算下标访问的变量。所有包含于数组中且被当作元素的变量必须是同一类型。这种类型自然被称为"数组类型"。数组可以存储整数对象、字符串对象或者你提出的任何对象。

数组的维数就是所谓的排(rank),它决定了相关数组元素的下标数。最常用的数组是一维数组(第一排)。一个多维数组具有的排数大于1 。每个维的下标始于0,终于维的长度减1 。

应有足够的理论支持。让我们看一下用一个数组初始化器( array initializer)初始化的数组:

string[] arrLanguages = { "C", "C++", "C#" };

该简写效果等同以下:

arrLanguages[0]="C"; arrLanguages[1]="C++"; arrLanguages[2]="C#";

而编译器为你做了所有的工作。当然,它将同样为多维数组初始化器工作:

int[,] arr = {{0,1}, {2,3}, {4,5}};

它是以下的简写:

arr[0,0] = 0; arr[0,1] = 1;

arr[1,0] = 2; arr[1,1] = 3;

arr[2,0] = 4; arr[2,1] = 5;

如果你不想事先初始化一个数组,但知道了它的大小,该声明就象这样:

int[,] myArr = new int[5,3];

如果数组的大小必须动态地被计算,用于数组创建的语句可以象这样写:

int nVar = 5;

int[] arrToo = new int[nVar];

正如我在这一节开始所陈述的,你可以往数组里面塞任何东西,只要所有的元素类型都相同。因此,如果你想把任何东西放进一个数组,就声明它的类型为对象:

 

4.3  加框和消框

这一章的课程中,我已经给出了各式各样的值类型和引用类型。由于速度的原因,你会使用值类型——它们只是占据一定的内存块。但是,有时对象的方便性就象值类型一样好用。

加框和消框,C#类型系统的核心概念,这时闪亮登场了。通过允许一个值类型转换成类型对象或从类型对象转换成值类型,这种机制形成了值类型和引用类型之间的捆绑连接。任何东西终究是一个对象——但是,这只是在需要它们作为对象时。

4.3.1  加框转换

给一个值加框指隐式地把任何值类型转换成类型对象。当一个值类型被加框时,一个对象实例就被分配,且值类型的值被拷贝给新的对象。

看以下例子:

 int nFunny = 2000;

 object oFunny = nFunny;

第二行的赋值暗示调用一个加框操作。nFunny整型变量的值被拷贝给oFunny对象。现在整型变量和对象变量都同时存在于栈中,但对象的值居留在堆中。

那么,它暗示着什么呢? 它们的值互相独立——在它们之间没有连接。(oFunny没有引用nFunny的值。)  以下代码说明了结果:

int nFunny = 2000;

object oFunny = nFunny;

oFunny = 2001;

Console.WriteLine("{0} {1}", nFunny, oFunny);

当代码改变oFunny的值时,nFunny的值并没有改变。只要你脑袋中有这个copy动作,就能够使用值类型的对象功能,发挥出你的巨大优势!

4.3.2  消框转换

和加框相比,消框是显式操作——必须告诉编译器,你想从对象中抽取出哪一种值类型。当执行消框操作时,C#检测所请求的值类型实际上存储在对象实例中。经过成功的确认,该值被消框。

这就是消框如何执行:

int nFunny = 2000;

object oFunny = nFunny;

int nNotSoFunny = (int)oFunny;

如果错误地请求一个double值

double nNotSoFunny = (double)oFunny;

通用语言运行时(Common Language Runtime,简写CLR)将会引发一个InvalidCastException异常。你可以在第7章 "异常处理" 中学到更多有关异常处理的知识。

 

4.4  小结

在这一章中,你学到了C#中用到的各种类型。简单的值类型包括整型、布尔型、浮点型和小数型。你会十分经常地用到一些类型,进行数学和金融的计算,以及逻辑表达。

在介绍引用类型之前,我显示了一个看起来象类的结构类型。它几乎就象一个类那样运作,但它只是一个值类型,这使它更加适合需要有大量的小对象的场合。

引用类型起始于所有对象之母的objedt本身。object是C#中所有对象的基类,且它同样用于值类型的加框和消框。除此之外,我还让你领略了代表元、字符串和数组。

令C#程序员十分神气的类型就是类。它是C#面向对象编程的心脏,下一章整章专门让你迅速理解这个激动人心且功能强大的类型。

 

 

数字设计实验:自动售货机 本文旨在介绍数字设计实验:自动售货机的设计思路和实现代码 阅读详情

相关推荐

看不懂分子动力学模拟的结果?一文读懂RMSD曲线

随后,将每一帧结构与初始模板进行叠合,计算对应原子的平均偏移量,即RMSD。总之,掌握 RMSD 的解读方法,就等于抓住了评估分子动力学模拟成败与质量的“总开关”。①在模拟初始阶段,RMSD会从0迅速上升,这是蛋白质从静态晶体或模型结构释放到溶液环境中并逐渐适应的正常过程。②经过一段时间后,曲线不再系统性上升或下降,而是围绕一个平均值,小幅度地上下波动,形成一个稳定的“平台”。这种情况下,RMSD 在初始快速上升后,并未进入平台,而是持续甚至加速上升,始终未见收敛。🔍 如何解读不同趋势的RMSD曲线。

weixin_46587777的博客 4887

C# 类型详解

前言:       C#中的类型有两种:值类型(Value Type)和引用类型(Reference Type)。值类型继承自System.ValueType类,主要包括结构、枚举和简单类型。而引用类型直接继承自System.Object基类,主要包括类、接口、委托、String等。在讲值类型和引用类型之前,我们必须先了解这两种类型在内存中的存储方式,也就是栈(Stack)和堆(Heap)的

雾里看花 1万+

轻量级NAS的隐秘战场:比特米盒CumeBox2与CasaOS的生态融合实践

本文探讨了比特米盒CumeBox2轻量级NAS设备与CasaOS操作系统的生态融合实践。通过硬件选型、系统部署、性能优化和应用场景分析,展示了如何将CumeBox2与CasaOS深度整合,打造经济实用的家庭数据管理中心,特别适合入门级用户和小型办公环境。

rl6adventurer的博客 895

C# 学习-常用类梳理

C#学习成长篇

weixin_46024391的博客 1098

Win系统蓝牙设备频繁卡顿/断连 - 解决方案

无线网卡有2个模块,一个是WiFi,一个是蓝牙,因此蓝牙问题可能和无线网卡有关。在某些情况下,例如高温或WiFi速率过高,会导致蓝牙频繁卡顿/断连。解决方法分为2种,1是更新驱动,2是更换无线网卡。

NSJim的博客 2万+

从原理到调试:一次搞懂Camera Sensor的曝光、增益与帧率三角关系

本文深入解析Camera Sensor中曝光、增益与帧率之间的动态平衡关系,揭示低光环境下帧率下降的根本原因。通过实际调试案例和底层公式分析,帮助开发者理解如何优化相机参数设置,实现画质与流畅度的最佳平衡。

weixin_31310913的博客 429

C#常用类

如果两个字符串相同,则返回0;与String类不同的是,StringBuilder类创建的字符串的长度是可以改变的,它类似一个字符容器,当在其中添加或删除字符时,并不会产生新的StringBuilder对象,因此可以让字符串的拼接操作变的更加高效。使用的原因:在程序开发中,经常会使用大量的字符串,由于字符串是不可变的,因此在代码中频繁的拼接字符串会创建多余的对象,从而影响程序的性能。第一个构造方法是无参数的,通过它创建的Random实例对象每次使用的种子值是随机的,因此每个对象产生的随机数不同。

ht_game的博客 2338

二、租用AutoDL服务器与连接教程

点击右上角控制台,选择【租用新的实例】;,我这里使用的是xshell和xftp工具(自行下载)。打开本地目录和服务器目录,直接拖动文件。

zzf021122的博客 1326

c#中的类

抽象类:高度概括,优先规划,抽离共性.并不是为了实例化个体.主要是用来等着其他类来继承.没有类来继承抽象类无意义.抽象类是不能实例化的.所以无法通过实例的方法来方法抽象类的方法与属性,也无法通过抽象类来访问抽象类中的属性与方法.所以建议不要再抽象类中定义实例成员,如果一个抽象类中有实例成员,我们称这个类没有完全抽象.如果一个类只有抽象成员我们称它为完全抽象.3.在密封类中不能包含虚成员,因为虚成员只能在派生类中被重写.,密封方法在密封类中.密封方法不能在其他类中再次被重写.密封类没有子类不能被继承.

qq_57212959的博客 436

HDMI接口及其在编程中的应用

在编程中,我们可以使用HDMI接口来控制和管理连接到计算机的HDMI设备。本文将介绍HDMI接口的基本原理以及如何在编程中使用HDMI接口。在编程中,我们可以使用HDMI接口来控制和管理连接到计算机的HDMI设备。本文介绍了HDMI接口的基本原理,并提供了使用Python编程语言和相关库实现HDMI接口应用的示例代码。我们可以使用编程语言提供的音频库来生成和播放音频,并将其通过HDMI接口输出到连接的设备上。我们可以使用编程语言提供的音频库来生成和播放音频,并将其通过HDMI接口输出到连接的设备上。

CodeByte的博客 802

【WLAN】【基础知识】WIFI那些事儿之信道和频谱(涵盖2.4G、5G、6G,全网最全)

- 从事WIFI相关开发或测试工作,经常要和信道、频宽、频率等打交道,本文仅将平时涉及的2.4G、5G、6G的信道、频宽、频率等做一总结。 - 一图胜万言,本文汇总了工作中经常用到的频谱图,保证全网最全!!! - 本博客地址,https://blog.youkuaiyun.com/qxhgd,欢迎各位关注,转发请注明出处。

一介草民,只为生活。 1万+

C#类的分类(静态类、实例类、嵌套类、结构、简单的抽象类、简单的密封类)

本节课我们来学习类的扩展分类,看我的标题中就罗列出了类的分类,类按照声明方式和功能定义共分为这六种类,实例类就是我们一直在用的类,class关键字前没有其他的修饰符,之前已经有很多实例类的使用方法了,我们今天主要是学习其他五种类。     静态类 --------------------------------------------------------------------

血虹 2483

QGIS之二十六pbf转osm转shp

QGIS之二十六pbf转osm转shp

yilvyangguang520的博客 7499

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

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

rainbow的专栏 1632

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

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

rainbow的专栏 1559

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

 前言0.1  提要    欢迎阅读《展现 C#》(Presenting C#)。这本书是你提高企业编程语言的一条捷径。这种企业编程语言带有下一代编程语言服务运行时(NGWS Runtime):C#(发音"C sharp")。    NGWS Runtime 是一个不仅管理执行代码、同时也提供使编程更加容易的动态环境。编译器产生受管代码以指向这种受管理执行环境。你获得跨平台语言集成、跨平台语言

rainbow的专栏 1465

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

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

rainbow的专栏 2131

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

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

rainbow的专栏 1417

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

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

rainbow的专栏 1504

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

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

weixin_39758953的博客 1821

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

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

rainbow的专栏 1829

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

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

3726

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

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

顺其自然~专栏 1824

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#代码在 Excel 中接受或拒绝修订内容

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

2501_93070778的博客 214
上一篇: <<展现C#>> 前言(补充) 和第三章 第一个C#程序(修订)
下一篇: <<展现C#>> 第五章 类(修订)
rainbow
博客等级 码龄27年 3粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值