CSharp学习资料
- 格式:docx
- 大小:40.11 KB
- 文档页数:8
Csharp控件详解C#控件一览表前所未有的震撼(太详细了)C#控件及常用设计整理1、窗体1、常用属性(1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。
(2)WindowState属性:用来获取或设置窗体的窗口状态。
取值有三种:Normal(窗体正常显示)、Minimized(窗体以最小化形式显示)和Ma某imized(窗体以最大化形式显示)。
(3)StartPoition属性:用来获取或设置运行时窗体的起始位置。
(4)Te某t属性:该属性是一个字符串属性,用来设置或返回在窗口标题栏中显示的文字。
(5)Width属性:用来获取或设置窗体的宽度。
(6)Height属性:用来获取或设置窗体的高度。
(7)Left属性:用来获取或设置窗体的左边缘的某坐标(以像素为单位)。
(8)Top属性:用来获取或设置窗体的上边缘的y坐标(以像素为单位)。
(9)ControlBo某属性:用来获取或设置一个值,该值指示在该窗体的标题栏中是否显示控制框。
值为true时将显示控制框,值为fale时不显示控制框。
(10)Ma某imizeBo某属性:用来获取或设置一个值,该值指示是否在窗体的标题栏中显示最大化按钮。
值为true时显示最大化按钮,值为fale时不显示最大化按钮。
(11)MinimizeBo某属性:用来获取或设置一个值,该值指示是否在窗体的标题栏中显示最小化按钮。
值为true时显示最小化按钮,值为fale时不显示最小化按钮。
(12)AcceptButton属性:该属性用来获取或设置一个值,该值是一个按钮的名称,当按Enter键时就相当于单击了窗体上的该按钮。
(13)CancelButton属性:该属性用来获取或设置一个值,该值是一个按钮的名称,当按Ec键时就相当于单击了窗体上的该按钮。
(14)Modal属性:该属性用来设置窗体是否为有模式显示窗体。
如果有模式地显示该窗体,该属性值为true;否则为fale。
使用c#调用c++dll心得最近使用C#调用c++dll,有了一些心得,总结如下:1、如何引用C++的dll(1)对于动态dll,需要使用c#的DllImport类进行引入。
格式如下:[DllImport("dllname.dll",EntryPoint="functionname",CallingConvention = CallingConvention.Winapi)]意思:引入dllname,使用该dll的functionname方法,该方法的调用方式为Winapi方式(调用方式需依据c++dll而定)。
例子:///原型:void WINAPI AVRecord_destroy(HANDLE handle)[DllImport("AVRecord.dll", EntryPoint = "AVRecord_destroy", CallingConvention = CallingConvention.Winapi)]Public static extern void destroy(IntPtr hAVRecordHandle);说明:引入的dll的AVRecord_destroy方法体现在destroy这个c#方法上,该方法的方法签名由c++的dll的AVRecord_destroy的方法签名改写。
(2)静态dll,只需引用中添加静态dll的引用即可。
2、C#与c++数据类型转换(1)、c#与c++的数据类型精确转换是一件比较吃力不讨好的事,在使用过程中总存在各种原因导致需要频繁的转换数据类型,故以下只列出在本人项目中使用的类型转换(2) c++与c#数据类型转换C++ 数据类型 c#数据类型HANDLE(句柄)--------------------- IntPtrLPVOID(long型指针)-------------- IntPtrInt ------------------------------- intUnsigned long --------------------- intBOOL ------------------------------ bool&(取地址)--------------------------- ref关于byte[]: byte[]可以不用转换,直接使用;或者转成string注意:关于byte[]是否该转换为string,该项需要依据dll是否有对byte[]进行赋值操作。
C#,深入浅出全接触目录表一、什么是C#?二、Java与C#三、C#的主要特征四、安装运行环境五、C#编辑器六、C#的程序结构七、C#和名称空间八、C#中一个经典例程的编写与编译九、C#编程实战演习ABC1、使用Visual Studio .NET编写C#程序2、使用Visual C#创建Windows应用程序3、创建C#类库(Dll)一、什么是 C#?C# 是由Microsoft开发的一种新型编程语言,由于它是从C和C++ 中派生出来的,因此具有C++的功能。
同时,由于是Microsoft公司的产品,它又同 VB一样简单。
对于web开发而言,C#象 Java,同时具有Delphi的一些优点。
Microsoft宣称:C#是开发.NET框架应用程序的最好语言。
二、Java与 C#要学习C#,不能不首先看一看Java语言。
相对于其他编程语音,Java有一个无庸置疑的优点:用户以及编译器第一次不必了解生成可执行代码的特定CPU细节。
Java引入了一个编译代码中间层,叫做字节代码,并使用一个虚拟抽象的机器,而不是一个真实的机器。
当Java 编译器结束了一个源文件的编译后,你所得到的不是可以立即在一个给定平台上运行的代码,而是可以在任何真实的平台上运行的字节代码,唯一的条件就是这个平台要理解和支持Java。
这些发展包含着一个文化的变革。
作为一个开发人员,你只需要确定Java虚拟机(JVM)提供的抽象层,不同的OS销售商负责执行代码层,从而将中立于平台的字节代码映射到主机平台的机构中。
在这种情况下,Java似乎是统一分布式计算机世界的领袖候选人了。
“编写一次,永远运行”(并且无论在哪里)一度成为Java诱人但却真实的口号。
那么为什么说Java只是“似乎”是一个好东西呢?跨平台理论的发展很好地证明了这一点。
我们看到,将Java代码从一个平台移植到另一个平台—Java这个语言最重要和最受吹捧的特点—并不象宣传的那样容易。
命名规范_C(Sharp)1.命名规范a)类【规则1-1】使用Pascal规则命名类名,即首字母要大写。
【规则1-2】使用能够反映类功能的名词或名词短语命名类。
【规则1-3】不要使用“I”、“C”、“_”等特定含义前缀。
【规则1-4】自定义异常类应以Exception结尾。
【规则1-5】文件名要能反映类的内容,最好是和类同名。
b)类字段【规则2-1】用camel规则来命名类成员变量名称,即首单词(或单词缩写)小写。
【规则2-2】类字段变量名前可加“_”前缀。
【规则2-3】坚决禁止在普通变量前加“m_”(这是VC老命名规则)。
c)方法【规则3-1】方法名采用Pascal规则,第一个字符要大写。
【规则3-2】方法名应使用动词或动词短语。
【规则3-3】类中访问修饰符或功能相同的方法应该放在一起,且公共或实现接口的方法在前。
d)属性【规则4-1】使用名词定义属性,属性使用Pascal规则,首字符大写。
【规则4-2】属性和相应字段名称要关联,可以使用“重构”菜单来生成属性。
e)参数【规则5-1】参数采用camel规则命名,且首字符小写。
【规则5-2】使用描述性参数名称,参数名称应当具有最够的说明性。
【规则5-3】不要给参数加匈牙利语类型表示法的前缀。
【规则5-4】检查方法所有输入参数的有效性。
f)常量【规则6-1】只读常量使用Pascal命名规则,即首字母大写。
【规则6-2】枚举名使用Pascal规则命名,枚举成员本质属于常量,命名规则同上。
【规则6-3】枚举值从小到大顺序定义。
【规则6-4】静态字段或属性采用Pascal规则,即首字符大写。
g)接口【规则7-1】接口定义使用Pascal规则,且必须以大写“I”开头。
【规则7-2】接口名称要有意义,中间不要有下划线“_”等字符。
【规则7-3】如果类实现了接口,名称尽量和接口相同,只是省掉“I”字符。
h)事件【规则8-1】委托名称采用Pascal规则,即首字符大写。
C练习题一、基础语法1. 声明一个整型变量并赋值为10。
2. 声明一个浮点型变量并赋值为3.14。
3. 声明一个字符串变量并赋值为"Hello, World!"。
4. 声明一个布尔变量并赋值为true。
5. 创建一个名为`MyClass`的类,并在其中声明一个名为`myField`的私有整型字段。
6. 在`MyClass`类中添加一个构造函数,接受一个整型参数并赋值给`myField`字段。
7. 在`MyClass`类中添加一个名为`PrintField`的方法,打印出`myField`字段的值。
二、控制结构8. 编写一个程序,使用`if`语句判断一个整数变量是否大于0。
9. 编写一个程序,使用`switch`语句根据整数变量的值输出对应的星期名称。
10. 编写一个程序,使用`for`循环打印1到10的数字。
11. 编写一个程序,使用`foreach`循环遍历一个整数数组并打印每个元素。
12. 编写一个程序,使用`while`循环计算1到10的阶乘。
三、函数和方法13. 编写一个名为`Add`的方法,接受两个整数参数并返回它们的和。
14. 编写一个名为`Multiply`的方法,接受两个整数参数并返回它们的乘积。
15. 编写一个名为`PrintNumbers`的方法,接受一个整数参数,打印从1到该参数的所有数字。
16. 编写一个名为`ReverseString`的方法,接受一个字符串参数并返回其反转后的字符串。
17. 编写一个名为`FindMax`的方法,接受一个整数数组参数并返回数组中的最大值。
四、面向对象18. 创建一个名为`Person`的类,包含姓名和年龄两个属性。
19. 在`Person`类中添加一个构造函数,接受姓名和年龄作为参数。
20. 在`Person`类中添加一个名为`PrintInfo`的方法,打印出该人的姓名和年龄。
21. 创建一个`Student`类,继承自`Person`类,并添加一个名为`Grade`的属性。
因为我们不光要写代码,而且要写好的代码,因此我们必须强调基础: 离散数学、算法与数据结构、操作系统、计算机体系结构、网络、编译原理等。
很多时候技术人员之间能力的高低,很可能就会取决于这写基础。
有朋友告诉我,这些计算机科学的基础的意义不仅仅在于知识本身,它们还能够让人的思维更符合计算机科学的发展和变革第三章变量和表达式3.1C#的基本语法C#编译器不考虑空格、回车符或tab字符。
C#是一种块结构的语言,所有语句都是代码块的一部分,用“{ … }”来界定。
注意花括号不需要附带分号。
代码块可以互相嵌套,被嵌套的块要缩进得多一些。
C#代码是区分大小写的。
3.2C#控制台应用程序的基本结构使用#region和#endregion关键字,可以定义展开和折叠的代码区域的开头和结尾。
以#开头的任意关键字实际上都是一个预处理命令。
3.3变量声明变量的C#语法是,指定类型和变量名:<type> <name>;3.3.1简单类型1、用N位来存储的变量可以表示任何介于0到(2N-1)之间的数。
大于这个值的数不能存储在这个变量中。
数值类型过多的原因是要用合适的数值类型存储适合的变量,不要浪费内存也不要出现不能满足变量范围的情况。
Byte:0—255; short:0—65535; int:0—4294967295……………2、这些类型中的每一种都利用了.NET Framework中定义的标准类型。
使用标准类型可以在语言之间交互操作。
在C#中这些类型的名称是Framework中定义的类型的别名,也就是说这些类型都是在Framework中。
3、浮点数变量类型:float/ double /decimal前两种用+/-m×2e,而decimal用+/-m×10e M和e都有最小值和最大值。
4、注意给字符串赋值时,必须小心换行。
C#编译器会拒绝分布在多行上的字符串.如果要多行显示可以使用\n. str=“this is \nmy mouse!”;3.3.2变量的命名变量名的第一个字符必须是字母,且不能使用特定含义的字符,系统的关键字等。
一、基本数据类型1.什么是公用类型系统。
2.什么是字面量。
3.C#中基本数据类型包括哪几种?4.C#中的值类型包括哪几种?5.C#中简单类型共有多少个数值类型?分别是什么?6.什么是布尔类型?7.什么是枚举类型?声明格式是什么?8.什么是结构类型?声明格式是什么?9.引用类型包括哪几种类型?分别是什么?10.解释什么是堆栈。
11.什么是装箱、拆箱?用简单示例演示装箱、拆箱操作。
12.什么是常量?怎样指定常量数据类型?13.C#采用的是那种字符编码?在Unicode编码中找出所有的汉字。
14.C#支持哪两种字符串常量?分别是什么?怎样定义。
15.C#中怎样声明“符号常量”。
16.用流程图画出逻辑运算符&&和||的运算执行流程。
17.位运算符主要分为哪两种?分别是什么?18.下面是用位运算符编写的一个简单的加密解密程序,请分别为每一行代码注释。
using System;class Encode{public static void Main(){char ch1 = ‟o‟, ch2 = ‟k‟;int key = 0x1f;Console.WriteLine(“明文: ” + ch1 + ch2);ch1 = (char)(ch1 ^ key);ch2 = (char)(ch2 ^ key);Console.WriteLine(“密文: ” + ch1 + ch2);ch1 = (char)(ch1 ^ key);ch2 = (char)(ch2 ^ key);Console.WriteLine(“解码: ” + ch1 + ch2);}}19、c#中主要有哪三种形式?分别是什么?怎样定义?20、声明一个多维数组对象并进行初始化。
21、声明一个不规则数组对象并进行初始化。
22、引用变量的默认值在默认情况下是什么?二、流程语句1、从键盘输入学生的百分制成绩,换算成等第制成绩。
(要求用switch()语句)2、用while()语句求1-100之间所有整数的和。
Csharp的常用关键字不论你是新手还是老手,是否对C#的某些关键字有些摸不到头脑呢?那我就和大家一起学习一下这些关键字的含义把。
类型Void用作方法的返回类型时,void 关键字指定方法不返回值。
在方法的参数列表中不允许使用void。
采用以下形式声明一个无参数的、不返回值的方法:Ovid SampleMethod();Var在方法范围中声明的变量可以具有隐式类型 var。
隐式类型的本地变量是强类型变量(就好像您已经声明该类型一样),但由编译器确定类型。
有返回值引用类型Class类是使用关键字 class 声明的委托委托类型的声明与方法签名相似,有一个返回值和任意数目任意类型的参数:public delegate void TestDelegate(string message);public delegate int TestDelegate(MyType m, long num);delegate 是一种可用于封装命名或匿名方法的引用类型。
委托类似于 C++ 中的函数指针;但是,委托是类型安全和可靠的。
接口接口只包含方法、属性、事件或索引器的签名。
成员的实现是在实现接口的类或结构中完成的Objectobject 类型在 .NET Framework 中是 Object 的别名。
在 C# 的统一类型系统中,所有类型(预定义类型、用户定义类型、引用类型和值类型)都是直接或间接从 Object 继承的。
可以将任何类型的值赋给object 类型的变量。
将值类型的变量转换为对象的过程称为“装箱”。
将对象类型的变量转换为值类型的过程称为“取消装箱”。
Stringstring 类型表示零或更多Unicode 字符组成的序列。
string 是 .NET Framework 中 String 的别名。
尽管 string 是引用类型,但定义相等运算符(== 和 !=)是为了比较string 对象(而不是引用)的值。
C#基础知识.NET/DOTNET:一般指.NET FRAMEWORK框架,一种平台,一种技术C#(sharp):一种编程语言,可以开发基于.NET平台的应用一个解决方案下面可以有多个项目,项目可以包含多个文件,文件中是我们写的程序在文件中,命名空间中可以包含类,类中可以包含方法,方法中是我们写的程序Main方法是我们程序的入口方法:当我们执行程序时候会首先找到Main方法,从Main方法的第一句程序开始执行,当Main方法执行完成后,程序结束。
.sln是解决方案的文件,今天写的第一句话:Console.WriteLine("你想写的内容!");第二句话:Console.ReadKey();当程序执行到Console.ReadKey();的时候,程序会停在这里,等待用户从键盘上输入一个键盘,用户输入这个键之后,程序才继续执行。
在C#中,每一句话都要一分号结束。
#region和#endregion可以折叠一段代码变量:代表着一块内存空间,我们可以通过变量名称向内存存取数据,有变量就不需要我们记忆复杂的内存地址。
在学习一句话Console.WriteLine()用于让用户从键盘上输入一句话,当程序执行到下面这句话,就会暂停,然后等待用户从键盘上输入一句话,按下回车继续执行。
如果想得到用户输入内容,就需要用户定义一个string类型的变量,写在下面这句话前面接收用户输入的内容。
转义字符是一个字符,可以赋值给例如char这样的类型;它有一个\+一个字母来组成具有特殊意义的一个字符;常用的转义字符有:\n换行 \b相当于backspace退格 \t tab由多个空格组成的一个字符,具有行与行之间的对齐功能,@字在字符串前面表示不转义,其都两种定义1)字符串中如果有\,则不在理解为转义符2)使字符串可以换行3)如果在字符串前面加上@符号,在字符串上用两个双引号代表一个双引号Decimal类型默认的无法转换成double类型注意:赋值运算符/算术运算符在进行运算时,要参与运算的操作数的类型必须相同,并且其运算结束也与操作数的类型相同。
csharp基本概念C#(C Sharp)是一种通用的、面向对象的编程语言,由微软公司于2000年推出。
作为一门现代化的编程语言,C#具有许多强大的功能和特性,它的语法简洁易懂,易于学习和使用。
本文将通过回答以下问题,逐步介绍C#的基本概念:1. 什么是C#?2. C#的发展历史是什么?3. C#的特点和优点有哪些?4. 如何安装和设置C#环境?5. C#的基本语法是什么样的?6. C#的变量和数据类型有哪些?7. 如何定义和使用函数?8. 如何进行条件判断和循环?9. 如何操作数组和集合?10. C#的面向对象编程特性是什么?现在让我们逐步回答这些问题,深入了解C#的基本概念。
1. 什么是C#?C#是一种基于对象的编程语言,它以C和C++为基础,并引入了一些Java 的特性。
C#旨在提供一种安全、稳定和易于使用的编程语言,用于构建各种应用程序,包括桌面应用程序、Web应用程序和移动应用程序。
2. C#的发展历史是什么?C#最早于2000年发布,是微软公司为了支持其.NET平台而推出的语言。
C#的设计目标是在保留C和C++语言优点的同时,简化语法和提供更高级的特性。
随着.NET的不断发展,C#也在不断改进和更新。
3. C#的特点和优点有哪些?C#具有多种特点和优点,包括:- 简单易学:C#的语法简洁明了,结构清晰,易于学习。
- 安全性:C#提供了许多安全机制,包括类型安全和内存管理,减少了一些常见的编程错误。
- 跨平台性:C#可以在Windows、Mac和Linux等多个平台上运行,提供了一致的开发体验。
- 面向对象:C#是一种面向对象的语言,支持封装、继承和多态等概念,使得代码更加模块化和易于维护。
- 垃圾回收:C#采用自动垃圾回收机制,减少了手动内存管理的工作量。
4. 如何安装和设置C#环境?要安装和设置C#环境,需要进行以下步骤:- 下载和安装Visual Studio:Visual Studio是一种集成开发环境(IDE),可以用于开发C#应用程序。
csharp基本概念-回复C#的基本概念1. 引言C#(读作C Sharp)是一种通用的面向对象编程语言,由微软公司开发并于2000年发布。
它是.NET框架的一部分,通常用于开发Windows桌面应用程序、移动应用程序、Web应用程序和游戏等。
本文将介绍C#的基本概念,包括数据类型、变量、运算符、控制结构和函数等。
2. 数据类型在C#中,数据类型用于定义变量的类型。
C#提供了许多基本数据类型,包括整数类型(byte、sbyte、short、ushort、int、uint、long、ulong)、浮点类型(float、double、decimal)、布尔类型(bool)、字符类型(char)、字符串类型(string)等。
例如,可以使用int类型来声明一个整数变量:int x = 10;。
3. 变量变量是用于存储数据的内存位置,可以通过变量名访问和操作存储的数据。
在C#中,变量必须先声明后使用。
可以使用以下语法来声明变量:数据类型变量名;。
例如,可以使用int类型来声明一个名为x的变量:int x;。
4. 运算符运算符用于执行各种数学和逻辑操作。
C#提供了一系列常用的运算符,包括算术运算符(+、-、*、/、)、关系运算符(>、<、==、!=)、逻辑运算符(&&、、!)、赋值运算符(=、+=、-=)、条件运算符(?:)等。
例如,可以使用加法运算符来计算两个整数的和:int sum = 5 + 3;。
5. 控制结构控制结构用于控制代码的执行流程。
C#提供了许多控制结构,包括条件语句(if、else、switch)、循环语句(for、while、do-while)、跳转语句(break、continue、return)等。
例如,可以使用if语句来根据条件执行不同的代码块:if (x > 0) { Console.WriteLine("x是正数"); } else { Console.WriteLine("x是负数或零"); }。
第1章VC#图像处理学习内容与要点:本章介绍VC#图像处理基础、图像文件的打开、保存方法及图像的移动、尺寸变换、分辨率变换等操作的基本知识和处理技巧。
主要有:VC#图像处理基础图像文件的打开和保存图像的拷贝和粘贴图像的放大和缩小图像的分辨率变换等。
技术要点:Clipboard对象的使用SystemImage方法的使用1.1 VC#图像处理基础1.1.1 Visual C# 图像处理组件使用 CDI+可以显示和处理多种格式的图像文件。
使用 Windows 窗体 PictureBox 控件,可以在设计时将 Image 属性设置为有效图片,从而在窗体上加载和显示图片。
可使用的图像文件类型如表7-1所示。
表7-1 图像文件类型类型文件扩展名位图.bmpIcon .icoGIF .gif图元文件.wmfJPEG .jpg1.1.2 Bitmap 对象Bitmap 对象是用于处理由像素数据定义的图像的对象。
对图像文件进行处理的类主要为Bitmap类和ImageAttributes类,Bitmap类属于System.Drawing命名空间,该命名空间提供了对 GDI+ 基本图形功能的访问。
Bitmap类封装 GDI+ 位图,此位图由图形图像及其属性的像素数据组成。
Bitmap的常用方法和属性如表7-2所示。
表7-2 Bitmap的常用方法和属性公共属性属性说明Flags 获取此 Image 对象的属性标记。
FrameDimensionsList 获取 GUID 的数组.Height 获取此 Image 对象的高度。
HorizontalResolution 获取此 Image 对象的水平分辨率.Palette 获取或设置用于此 Image 对象的调色板。
PhysicalDimension 获取此 Image 对象的宽度和高度。
PixelFormat 获取此 Image 对象的像素格式。
PropertyIdList 获取存储在此 Image 对象中的属性 ID 的数组。
CSharp学习资料
第一章.NET体系结构简介
体系主要由以下两部分组成Framework类库
.NETFramework类库是一个内容丰富的类集合,它可以完成以前要通过
WindowAPI来完成的绝大多数任务。
CLR是.NETFramework的核心执行环境,也称.NET运行库。
1.2CLR概述
CLR主要负责“托管代码”的编译和运行。
在.NET中代码的编译分为两个阶段,如图1.1所示:1、把源代码编译为Microoft中间语音(MSIL);
2、CLR把MSIL编译为平台专用的代码。
某.cC#源代码编译器CLR激活JIT目标机器
MSIL微软(Window中间语音、Linu某等)图中C#语音的执行过程1.21托管代码(ManagedCode)
托管代码是由CLR运行环境(不是直接由操作系统)执行的代码。
托管代码的优点:平台无关性提高性能
语音的互操作性
1.22非托管代码(UnmanagedCode)
非托管代码是由操作系统直接执行的代码。
非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务;它与托管代码不同,后者从公共语言运行库中获得这些服务。
非托管代码有汇编语音、C语音等。
托管代码和非托管代码区别:前者运行效率稍低,代码编写容易,开发效率高;后者运行效率高,代码编写较难,开发效率低。
第二章面向对象语言C#基础
2.1C#简介
2.11第一个C#程序(控制台应用程序)
uingSytem;//引用命名空间namepaceBitPC.CSharp.Baic//定义命名空间{
claMyFirtCSharpCla//引用类类型{
publictaticvoidMain()//方法{
Conole.WriteLine(“ThiimyfirtC#program!”);//输出无参字符串//输出带参数的字符串
Conole.WriteLine(“{0},你好,你的性别是{1}的!”,”唐健”,”男”);Conole.ReadLine();return;}}}
2.2变量
2.21变量的定义及初始化
在C#中声明变量使用的语法:数据类型变量;例如:inti;
变量只能先定义后使用;
定义变量后必须初始化才能使用;变量要占用一定字节数的内存单元,以上声明会在堆栈中给i分配4个字节。
声明i后,进行如下的初始化:inti=10;
2.3预定义数据类型2.31值类型和引用类型
值类型
结构体:truct(直接派生于Sytem.ValueType)数值类型:
整形:byte,hort,int,long等字符型:char
浮点型:float,double财务计算类型:decimal布尔类型:bool或Boolean用户自定义的结构体枚举:enum
可空类型:?及??
引用类型
数组类型
用户自定义的类型:
类:cla
接口:interface委托:delegate
对象类型:object字符串:tring两种类型的区别
存储地址不同:值类型存储在堆栈,引用类型存储在托管堆;值类型
之间主要传值,引用类型之间主要传地址;
例如:int是值类型,这表示下面的语句会在内存的两个地方存储值20;
//i和j都是整形
i=20;
j=i;
考虑下面代码
Vector某,y;
某=newVector();
某.Value=30;
y=某;
Conole.WriteLine(y.Value);
y.Value=50;
Conole.WriteLine(某.Value);
要理解的重点是在执行上面这段代码后,只有一个Vector对象。
某和y都指向包含该对象的内存位置(y=某;是传地址)。
要让y指向另一个不同的地址,必须使用new关键字创建一个新对象。
如果变量是一个引用,可以把其值设置为null,表示它不指向任何对象,而值类型不能赋值为空(可空类型除外);
y=null;//正确
inta=null;//错误
如果将引用设置为null,就不可对它调用任何非静态的成员函数或字段,否者运行时会抛出异常。
在C#中声明一个int类型的数据时,声明的实际上是.NET结构Sytem.Int32的一个实例,其意义深远:这表示在语法上,可以把所有的
基本数据类型看作是支持某些方法的类。
例如,要把inti转换为tring,可以编写如下代码:
tring=i.Totring();
2.33预定义的值类型
内置的值类型表示基本数据类型,例如整形和浮点型、字符型和布尔型。
2.34预定义的引用类型
C#支持两个预定义的引用类型:object(根类型,CTS中其他类型都
是从它
派生出来的),tring(Unicode字符串)
Object类型
在C#中,object类型就是最终的父类型,所有内置类型和用户定义
的类型都是从它派生而来。
两个目的:
可以使用object引用绑定任何子类型的对象。
Object类型执行许多一般用途的基本方法,包括Equal()、
GetHahCode()、GetType()和Totring()。
用户定义的类需要
使用一种面向对象技术——重写。
父类型的引用可以指向任何派生类的对象。
String类型
C#有tring关键字,在翻译为.NET类时,它就是Sytem.String。
tringtr1=”Hello”;
tringtr2=”World”;
tringtr3=tr1+tr2;
字符串字面量放在双引号中(“….”);若放在单引号中,编译器会把它
当作char,引发错误。
尽管这是一个值类型赋值,但tring是一个引用类型。
String对象保留在
堆上,而不是栈上。
String与引用类型在常见的操作上有一些区别。
例如,修改其中一个字
符串,就会创建一个全新的tring对象,而另一个字符串没有改变。
如下:tringtr1=”Hello”;tringtr2=tr1;tr1=”World”;
可以看到,tr1的值被改为World,但是tr2的值仍是Hello。
在字符串中,若要使用一般意义上的反斜杠,则需要用两个反斜杠字符(\\\\)来表示它,第一个“\\”是转义字符,如:
Stringfilepath=”C:\\\\ProCSharp\\\\Firt.c”;
2.35字符串常规操作
创建字符串
tringtr1=tring.Empty;tr1+=”Howold”;tr1+=”areyou”;
以上的操作性能不佳,浪费内存空间(任何一次对字符值的修改都要重新创建全新的对象及占用新的内存),,若需要频繁地进行字符串的连接,建议写成:tringtr1=”Howold”+”areyou?”;或使用StringBuilder类对象:
StringBuildertr2=newStringBuilder(tring.Empty,25);Str2.Append=(“Howold”);Str2.Append=(“areyou”);
StringBuildertr2=newStringBuilder(tring.Empty,25);是创建StringBuilder类的带
有空字符串的一个实例,同时指定该对象的最大容量为25,当修改tr2时,在达到容量之前,它不会为自己重新分配空间。
当达到容量时,将自动分配新的空间且容量翻倍。
所有从性能上来说,StringBuilder省去了频繁创建对象内存的时间,在性能上得到了很大的提高。
2.36var关键字
从C#3.0开始,C#中可用var关键字来声明任何类型的局部变量,该变量需要根据初始化表达式来推断变量的类型,所有在使用var关键字定义局部变量时必须进行初始化。
vara=1;varb=”Hello”;varc=newint[]{1,2,3};Conole.WriteLine(a.Ge tType());Conole.WriteLine(b.GetType());Conole.WriteLine(c.GetTyp e());输出结果:Sytem.Int32Sytem.StringSytem.Int32[]
上例中的“GetType()”方法是获得对象所属的数据类型,是反射机制的一种应用。
使用var关键字定义变量时,需要注意以下几点:
在声明时必须同时赋值,因为声明依赖于赋值号右边的表达式。
在使用var声明一个局部变量后,它仍然具有强类型
vara=1;
a=”Hello”;//会提示“无法将类型tring隐式转换int”;
在初始化时,不能是空类型(null);vara=null;//会提示“无法将类型赋予隐式类型的局部变量”的声明仅限于局部变量。
Var publicclaProgram
{
vara=1;//会出现”上下文关键字var只能出现在局
部变量声明中”的错误提示
publictaticvoidMain()
{
//……;
}}2.37流控制。