c#程序员参考手册—知识点精选

上传人:第*** 文档编号:34038120 上传时间:2018-02-20 格式:DOC 页数:9 大小:271.50KB
返回 下载 相关 举报
c#程序员参考手册—知识点精选_第1页
第1页 / 共9页
c#程序员参考手册—知识点精选_第2页
第2页 / 共9页
c#程序员参考手册—知识点精选_第3页
第3页 / 共9页
c#程序员参考手册—知识点精选_第4页
第4页 / 共9页
c#程序员参考手册—知识点精选_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《c#程序员参考手册—知识点精选》由会员分享,可在线阅读,更多相关《c#程序员参考手册—知识点精选(9页珍藏版)》请在金锄头文库上搜索。

1、C#程序员参考手册知识点精选 1. 默认的命名空间命名空间是 C#类、接口、委托、枚举和其他类型的一种逻辑上的组合。如果您没有定义自己的命名空间,代码会自动放入一个没有名称的全局命名空间中。命名空间的第一部分通常是一个公司或组织的名称,第二部分应该是相关技术的名称,后面跟可选的特性和设计名。比如,如果您在 Acme Engines Corporation 工作,您可以这样定义您好的命名空间:AcmeEngines.FuelInjector.Diesel。2. 类的默认访问控制符 internal类有四种访问属性: internal、private 、protected 和 public。在命名

2、空间中声明的类只能有 pubic 或 internal 访问属性。没有指定访问修饰符时,类的访问类型默认为 internal,即该类只能从同一个程序集(assembly)的其它类中访问。 让我们来看看当类不指定访问修饰符时,其它程序集中的类对它的访问情况。首先在名为 Quad.cs 文件中定义一个 Quad类,然后在名为 Test.cs 中定义一个 Test 类。我们试图在 Test 类中使用 Quad 类的一个实例。两个类的定义如下:Quad.cs 文件的内容为:using System;class Quaddouble width, height;public Quad(double w,

3、 double h)width = w;height = h;public double GetArea()return width * height;Test.cs 文件的内容为:using System;public class Testpublic static void Main()Quad q = new Quad(2.0, 3.0);Console.WriteLine(Area is 0, q.GetArea();为了测试,我们将 Quad.cs 文件单独编译成.dll 文件。方法是:第一步:把 Quad.cs 文件复制到 安装的目录下面,即与 C#编译器控制台 csc.exe

4、处于同一目录。笔者的系统装在 D 盘,所以把 Quad.cs 文件复制到 D:WINDOWSMicrosoft.NETFrameworkv1.1.4322 目录下面。第二步:打开命令窗口-输入 cmd 到控制台-cd D:WINDOWSMicrosoft.NETFrameworkv1.1.4322 转到 安装的该目录下。第三步:执行 csc 命令 csc /target:library Quad.cs 把程序 Quad.cs 编译为一个库文件 Quad.dll对文件 Test.cs 首先作第一步和第二步处理。由于 Test 类使用了 Quad 类的一个实例。要访问该类,使用下面的语法编译Tes

5、t 类:csc /Test.cs /reference:Quad.dll。但是,您会得到下面的错误信息:Test.cs(7,9):error CS0122:不可访问“Quad”,因为它受保护级别限制。Test.cs(8,42):error CS0246:找不到类型或命名空间名称“q”(是否缺少 using 指令或程序集引用?)这是因为 Quad 类和 Test 类位于不同的程序集中,而且 Quad 类是内部访问方式,所以 Test 类不能访问它。要解决这个问题,用 public 修改符定义 Quad 类就可以了:using System;public class Quaddouble widt

6、h, height;public Quad(double w, double h)width = w;height = h;public double GetArea()return width * height;3. 三种方法创建一个类实例类的实例是一个引用类型的变量。因此,对象存放在堆中。实例化对象主要有三种方法:(1) 使用 new 关键字 。new 关键字的作用是调用一个称为构造函数的特殊函数。要创建一个 Test 类的实例,可输入:Test mytest=new Test(); 这个语法实际上是把两个语句合二为一。语句的第一部分 Test mytest 创建一个 Test 类型的引用

7、,名为 mytest。语句的第二部分=new Test();创建一个与引用相关的 Test 对象,并调用没有参数的 Test 类的构造函数初始化该对象。 (2) 有些类可能没有可访问的构造函数,这种情况下就不能用构造函数来实例化该对象。这些对象的实例一般是在.NET Framework 的方法 内部创建,这些方法返回对类实例的引用。例如:File 类的 Create()方法(一个静态方法)返回对FileStream 对象的引用。可以用语法:FileStream fs=File.Create(data.inp);对一个名为 data.inp 的文件实例化一个FileStream 对象。(3) 实

8、例化对象还有一种方式 使用反射 。我们可以使用 System.Type 类动态检索具体类型的 ConstructorInfo 对象,并调用它检索类的一个实例。例如:给定一个 ReflectTest 类,它有一个公有的、无参数的构造函数: public class ReflectTestpublic ReflectTest()可使用下面的代码实例化该类: using System;using System.Reflection;public class ReflectTestpublic ReflectTest()public class Application/Get the Type obj

9、ect for the ReflectTest classType t=Type.GetType(ReflectTest);/Get the parameterless constructor for the classConstructorInfo ctor=t.GetConstructor(System.Type.EmptyTypes);/Invoke the constructor with a null parameterReflectTest test=(ReflectTest)ctor.invoke(null);4. 将构造函数声明为私有如果没有显式定义构造函数,系统将提供一个默认

10、的、不带参数的 public 构造函数,它将把数据成员初始化为默认值。如果希望拒绝对该构造函数的仅有访问(例如:如果只希望通过工厂类实例化该类),可以用一个不同的访问级别声明这个构造函数。如果定义了一个无参的 private 构造函数,我们将阻止该类被实例化(这种做法可以针对这样的类:它只有静态成员,而又不能声明为 abstract,因为我们想把它像 System.Math 类一样声明为 sealed)。 5. 调用基类的构造函数当创建类的实例时,它的创建工作包括它的基类的创建。从基类继承的任何数据成员必须进行初始化。派生类的构造函数的一个操作是从它的直接基类中调用一个构造函数。这个操作可以使

11、用基类的默认(无参数)构造函数隐式进行,也可以让派生类的构造函数显式调用基类的构造函数。如果类没有定义无参构造函数,就必须显式地调用一个基类的构造函数。方法是使用 :base 关键字。如:using System;public class Quaddouble width, height;public Quad(double w, double h)width = w;height = h;public double GetArea()return width * height;public class NamedQuad : Quadstring name;public NamedQuad(

12、double w, double h, string str): base(w, h)name = str;public string GetName()return name;public class BaseConstDemopublic static void Main() NamedQuad nq = new NamedQuad(2.0, 3.0, Harry);Console.WriteLine(Area of 0 is 1, nq.GetName(), nq.GetArea();运行结果:Area of Harry is 6这个例子中一个有趣的地方是如果我们是这样定义 NamedQ

13、uad 类构造函数的:public NamedQuad(double w, double h, string str)width = w;height = h;name = str;程序不会通过编译。这是因为 NamedQuad 构造函数将试图从 Quad 类调用一个无参数的构造函数,但 Quad 类没有定义一个无参数的构造函数。6. 结构和类的区别结构和类的主要不同在于:(1) 结构存放在栈中并按值传递。类的对象放在堆中,按引用传递。和类的对象相比,结构具有性能上的优势。原因之一是值类型的分配快于引用类型。原因之二是存放在栈中的值一离开作用域就立即被收回,不用等待垃圾收集器来处理。但是,结构

14、作为参数传递给方法前会复制它的一个完整的副本,所以只能用来表示小的数据结构。而当引用类型传递给方法时,传递的只是对对象的引用。(2) 结构既不能定义无参数的构造函数,又不能定义析构函数。(3) 结构的隐式类型是 sealed 类型,不能被继承。虽然它们可以提供一个或多个接口的实现。7. 接口默认的访问方式是 internal接口为类或结构提供了蓝图。它是一个能声明属性、索引器、事件和方法的编程构造。它不为这些成员提供实现,只提供定义。实现接口的数据类型必须提供接口成员的实现。在命名空间中声明的接口可以被授予 public 或 internal 访问类型,默认的访问方式是 internal。接口

15、中声明的成员隐式地为 public 和 abstract,它们 声明时没有实现,没有访问修饰符。C#的约定是接口名以一个大写的字母“I” 开始。8. 方法中参数的修饰符(params/ref/out)参数按值或按引用传递。未修饰的参数按值传递,方法中变量的改变不会影响到最初的变量。但是,因为对象变量是存放在堆中的,存放在栈中的只是该位置的一个引用,所以传递给方法的是这个内存地址,而不是实际的对象,对对象的任何改变将会反映在最初的变量中。引用参数按引用传递给方法。这意味着传递给方法的是对对象的一个引用。在方法内部对引用类型的改变都会影响到最初的变量。按值传递的引用类型参数和按引用传递的参数之间的

16、差别是很微小的。但在处理字符串时这种差异则很明显。 8.1 params 关键字params 关键字指明一个输入参数将被看作一个参数数组。参数数组将包含数量不定的指定类型的参数。因此 params 关键字用于可变的参数列表行为。params 关键字只能用于参数列表中的最后一个参数 。示例:params 关键字ParamsDemo 类定义了 Process()方法,它只打印一个 Strings 数组。如果没有使用 params 关键字,您必须在调用该方法前创建并加载 Strings 数组:using System;public class ParamsDemopublic static void Main()String s = new String3;s0 = Jackson;s1 = Zachary;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号