当前位置:文档之家› C#_keywords_1

C#_keywords_1

C#_keywords_1
C#_keywords_1

1、__arglist

让我们先从__arglist开始。 __arglist是用来给方法传送参数。通常我们是通过函数头部指定的

参数列表给方法传递参数的。如果我们想要给方法传递一组新的参数,我们需要重载方法。如果我们

想要传递的参数数量不确定,我们需要使用param数组。我们为什么要使用__arglist,因为上面两

种方法,存在的下面问题:

a、如果我们使用方法重载,一旦要传递一组新的参数,我们都要增加一个新的函数重载。

b、如果我们用param数组,参数类型必须相同或者使用param对象数组。

__arglist能解决上面的问题。你可以传递任何参数给函数,可以是任何类型,我们可以使用简单的

步骤分析每个参数。

让我们先看下下面代码:

1public int paramLength(__arglist)

2 {

3 ArgIterator iterator = new ArgIterator(__arglist);

4return iterator.GetRemainingCount();

5 }

如果我使用下面代码调用该函数

1int x = this.paramLength(__arglist(49,34,54,6,"Manimoy")); // returns 5

将被返回5给变量x。这是因为我们给这个方法传递了5个参数。我们可以访问每个参数,如:

1 TypedReference tf = iterator.GetNextArg();

2 TypedReference.ToObject(tf)

每次调用GetNextArg,GetRemainingCount将减1,直到遍历完迭代器的每个对象。

2、__refvalue

另一个有趣的关键字是__refvalue。它是用来获取一个引用对象的的值。你可以用来从TypedReference对象中获得实际对象。这需要两个参数,第一个就是TypedReference对象和另

一个是转换的类型。看看下面代码:

1int tfValue = __refvalue(tf, int);

3、__makeref

__makeref将使从对象中找出TypedReference对象。这跟_refvalue刚刚相反。请看下面的代码:1string name = "Ayan";

2 TypedReference tf = __makeref(name);

4、 __reftype

__reftype是用来从TypedReference类型的对象获得类型。看下面代码所示:

1 Type t = __reftype(tf);

2if(t.ToString().equals("System.String"))

3string str = __refvalue(t,string);

注:虽然我在所有的C#版本中发现上面这些关键字,但我没在工作中使用它。在未来版本的C#可

能不存在这些关键字,所以是否使用看你自己的风险。

5、Yield

Yield出现在.NET 2.0中,使用Yield将以枚举数对象值的形式返回,yield 语句只能出现在iterator 块中,该块可用作方法、运算符或访问器的体。在以下代码中,我构建了一个名字列表,将

返回长度小于5的名字列表,遇到yield break语句返回。

1 List lst = new List();

2 lst.Add("Abhishek");

3 lst.Add("Abhijit");

4 lst.Add("Manimoy");

5 lst.Add("Raj");

6 lst.Add("Ayan");

7 lst.Add("MacMillanRojer");

8 lst.Add("Rizzuto");

9foreach (string x in lst)

10 {

11if (x.Length > 12) // Breaks on MacMillanRojer

12yield break;

13else if (x.Length > 5) // Only returns those which are having length >5

14yield return x;

15else continue;

16 }

17

其实,yield return x 将判断每个元素,并创建了满足条件所有的元素的enumerable(length> 5)。

break语句将终止循环,并返回现有创建好的枚举。

6、 Fixed

另一种不常见的关键字是Fixed,它只能在不安全的C#代码块中使用。Fixed语句在个固定的内存

地址设置一个指针,它不会被移动到任何地方,即使执行了垃圾收集线程。让我们来看看下面的代码:

1int[] a = new int[] { 1, 2, 3 };

2fixed (int* pt = a)

3 {

4int* c = pt;

5 MessageBox.Show("Value : " + *c);

6// This will fix the variable totally so that it will

7 // not be moved when Garbage collector is invoked.

8 }

在这里,指针c和pt被分配相同的位置。Fixed通常会花销一些资源。实际上它妨碍垃圾收集的正常进程。因此,实际中应该避免使用 fixed语句。

7、Checked / Unchecked

另一个名为checked的关键字是用来控制算术溢出的情况。当算术运算溢出时,Checked关键字抛出OverflowException异常。

看下这段代码:

1int x = int.MaxValue;

2int y = int.MaxValue;

3int z = checked(x + y);

上述声明中,当执行到x + y时,将抛出OverflowException异常。 checked用来检查运算溢出并引发相应的异常。当发生OverflowException异常时,z被赋值为0。

当我们不需要抛出异常时,我们可以使用关键字unchecked。

1int x = int.MaxValue;

2int y = int.MaxValue;

3int z = unchecked(x + y);

通过执行上面的代码,z的值将被赋值为-2。

8、Volatile

volatile关键字用于定义一个变量,这个变量跨多个线程修改而不被lock(虽然我们大部分的时间锁定它们)。 volatile变量不受编译器优化,因此我们将获得该变量的所有的时间最新的值。见下面的例子:

1public volatile int i;

2 Thread th = new Thread(new ThreadStart(VolatileInvoke));

3 th.Start();

4 Thread.Sleep(5000); //Holds current Thread for

5 seconds.

5 MessageBox.Show("Value of i : " + i);

6 th.Abort();

7

8private void VolatileInvoke()

9 {

10while (true)

11 {

12 i++;

13 }

14 }

线程启动,volatile整数的值增加1,直到它被主线程中止。

注意:Volatile类型没有线程优化。

9、StackAlloc

在unsafe的C#代码中使用,动态从堆栈分配内存。stackalloc用于快速获取内存。当我们使用堆栈,我们可以利用内存快速存取的优势。我们可以这样声明一个数组:

1int* array = stackalloc new int[1000]

注意:您应该始终牢记,stackalloc内存是非常有限的。它是由每个线程默认为1MB。因此,如果我们需要大量的内存(超过1MB),我们必须回到原来堆内存结构。

10、 Global ::

当想要用本地的命名空间隐藏的全局的命名空间,这个关键字是非常方便的。假设我们有我们的项目中创建了一个名为System的类,C#中是允许这样做的。当我想使用全局的System空间时,我们必须使用global::.。让我们来看看下面的例子:

1internal class System

2 {

3internal class Array :IEnumerable

4 {

5public int Length

6 {

7get{return1000}

8 }

9#region IEnumerable Members

10public IEnumerator GetEnumerator()

11 {

12 Debug.Write("This is Dummy Array");

13return base.GetEnumerator();

14 }

15

16#endregion

17 }

18 }

现在,如果你要调用System.Array它会调用一个本地定义。要调用全局的System,我们需要使用global::System。当你确定调用全局命名空间时,最好它始终使用global:: 。

11、Namespace/Class别名

我们使用using 来定义别名。有2种形式的别名:

a、Namespace别名:

当你想缩短比较长的命名空间时,可以使用命名空间的别名。

1using Abhishek = System.Drawing;

2public class X

3 {

4public X()

5 {

6 Abhishek.Graphics g = this.CreateGraphics();

7 }

8 }

在这里,我们为System.Drawing的定义了一个别名Abhishek 。因此,我们在代码中引用Abhishek,与引用System.Drawing是相同的。

b、Class别名:

您也可以使用using语句来定义一个类引用。例如我写:using

Abhishek=System.Drawing.Bitmap;

Abhisek等同于Bitmap类。我们可以创建Abhishe的对象,直接访问静态函数。

1using Abhishek=System.Drawing.Graphics;

2public class X

3 {

4public X()

5 {

6 Abhishek g = this.CreateGraphics();

7 }

8 }

因此,Abhishek将对应本机的Graphics对象而不是整个命名空间的。

12、extern别名

我们使用C#工作,大多数时候需要引用外部控件集。

我们会遇到这样的情况,在相同的应用程序中相同命名空间中添加两个版本的dll时。在这种情况下,我们需要外部别名功能,来指定两个不同的程序集。

例如:

假设我们添加一个程序集x10.dll(V1),其中有一Y类

我们添加x20.dll(V2),我们可能要使用Y类

首先,要参考完全合格的程序集,我们需要在命令行中声明一个别名。

/r:XV1=X10.dll

/r:XV2=X20.dll

现在参考我们的使用

1extern alias XV1;

2extern alias XV2;

13、??

??与null值一起使用。在2.0中引入。看以下内容:

1 MyClass x = null;

2 x = x ?? new MyClass();

??的意思是说,如果X是null 值,将new MyClass() ,否则将赋值现有的X值

14、@variables

通常是C#不允许使用关键字做变量的。但是有一种方式例外。我们可以通过使用@创建与关键字具有相同的名称的变量。

假设我们定义:

1int @int = 10;

这意味着声明了一个名字为int的变量和并分配10给它。

15、Readonly

目前,readonly是C#关键字,用来创建不能被程序修改的变量。该声明为readonly的变量,变量的值将被分配一次,它将在整个对象执行过程中保持相同的值。

声明一个只读变量:

1public readonly int readonlyvariable = 20;

声明了一个值为20 的变量。再对这个变量赋值是不允许的。

16 、Const & readonly 的区别?

readonly类似关键字const。唯一不同的是, const 变量在编译时定义的,readonly变量在运行时定义。您可以从内部构造函数中分配readonly变量的值,因此根据你的构造函数分配,readonly值可能不同。

1public readonly int readsecond;

2public Documented()

3 {

4 readsecond = DateTime.Now.Second;

5 }

在这里,readsecond将根据对象的初始化指派不同的值,对于const这是不可能的。

17 、Default

对于一般对象,关键字default非常方便。当对象未初始化,它返回的默认值。例如,如果没有赋予任何值,我们都知道整数被初始化为0。当没有赋任何值,字符串为空字符。当不指定任何值,对象为null。

这些值是根据default关键字分配。

因此,如果我们写:

1int x = default(int);//will be assigned to 0

类似于:

int x;

一般情况下,当类型不确定时,我们可以使用default来分配特定的值给对象。让我们看看该示例:1public T GetDefault()

2 {

3return default(T);

4 }

该函数返回每个类型的默认值。从而

因此,我们可以使用关键字default非常容易获取对象默认的分配的值。

1int defx = this.GetDefault(); //will assign 0

2char defy = this.GetDefault(); // will assign null('\0')

3object defz = this.GetDefault(); // will assign null

18、Nullable Types

C#的Nullable类型可以处理空值甚至是基本数据类型。每个nullable类型是来自

System.Nullable。我们可以这样定义nullables:

1int? nullableint = null;

这里nullableint将被赋值null。

如果您访问nullable变量,您将获得2个属性。

HasValue属性将返回false,如果null被分配给变量;

Value属性返回变量的实际值。

您还可以使用每种nullable类型的对象的GetValueOrDefault函数来得到变量的默认值。

程序文件流程图

目录 8.2.3.4 a.质量手册编号 (2) 8.2.3.4 b.程序文件编号 (2) 8.2.3.4 d.质量记录编号 (2) 8.2附图 1:组织(及所属部门)制订、发放的文件受控流程图 (3) 8.2附图 2:外来受控文件受控流程图 (4) 8.3.2质量记录控制流程图 (5) 8.4.2内部质量审核工作流程图 (6) 8.5.2 6.10进货检验的不合格品控制程序 (7) 8.5.2 6.10产品已交付和使用时发现的不合格品控制程序 (8) 8.5.2产品最终检验的不合格品控制程序流程图 (9) 8.5.2产品实现过程中不合格品控制程序流程图 (10) 8.6.2A类纠正措施流程图 (11) 8.6.2B类纠正措施 (12) 8.6.2C类纠正措施 (13) 8.7.2《质量情况通报》的编制、发放、回收、处理 (14) 8.7.2财务状况预警系统 (15) 8.7.2预防措施的制订、实施和评价 (16) 8.8.2管理评审控制程序流程图 (17) 8.9.2人员招聘录用程序流程图 (18) 8.9.2培训程序流程图 (19) 8.9.2考核程序流程图 (20) 8.11.2产品实现过程策划程序流程图 (21) 8.11.2策划依据 (22) 8.12.2产品要求的识别与评审过程 (23) 8.12.2产品合同修改过程 (24) 8.12.2市场信息控制过程 (25) 8.13.2设计和开发控制程序 (26) 8.14.2采购控制程序流程图 (27) 8.15.2生产运作程序流程图 (28) 8.17.2测量和监控策划程序 (29) 8.18.2体系业绩的测量和监控过程程序 (30) 8.19.2过程的测量、监控和分析程序流程图 (31) 8.20.2产品测量和监控程序流程图 (32) 8.21.2持续改进过程控制程序 (33)

程序文件流程图

目录 8.2.3.4 a. 质量手册编号 (2) 8.2.3.4 b. 程序文件编号 (2) 8.2.3.4 d. 质量记录编号 (2) 8.2 附图1:组织(及所属部门)制订、发放的文件受控流程图 (3) 8.2 附图2:外来受控文件受控流程图 (4) 8.3.2 质量记录控制流程图 (5) 8.4.2 内部质量审核工作流程图 (6) 8.5.2 6.10 进货检验的不合格品控制程序 (7) 8.5.2 6.10 产品已交付和使用时发现的不合格品控制程序 (8) 8.5.2 产品最终检验的不合格品控制程序流程图 (9) 8.5.2 产品实现过程中不合格品控制程序流程图 (10) 8.6.2 A 类纠正措施流程图 (11) 8.6.2 B 类纠正措施 (12) 8.6.2 C 类纠正措施 (13) 8.7.2 《质量情况通报》的编制、发放、回收、处理 (14) 8.7.2 财务状况预警系统 (15) 8.7.2 预防措施的制订、实施和评价 (16) 8.8.2 管理评审控制程序流程图 (17) 8.9.2 人员招聘录用程序流程图 (18) 8.9.2 培训程序流程图 (19) 8.9.2 考核程序流程图 (20) 8.11.2 产品实现过程策划程序流程图 (21) 8.11.2 策划依据 (22) 8.12.2 产品要求的识别与评审过程 (23) 8.12.2 产品合同修改过程 (24) 8.12.2 市场信息控制过程 (25) 8.13.2 设计和开发控制程序 (26) 8.14.2 采购控制程序流程图 (27) 8.15.2 生产运作程序流程图 (28) 8.17.2 测量和监控策划程序 (29) 8.18.2 体系业绩的测量和监控过程程序 (30) 8.19.2 过程的测量、监控和分析程序流程图 (31) 8.20.2 产品测量和监控程序流程图 (32) 8.21.2 持续改进过程控制程序 (33)

办公文件管理流程图

办公文件管理流程图 办公文件管理流程图编号:sm,014 部门名称行管部流程名称办公文件管理流程层次概要公司内外各类文件的起草、收发与管理 2 部门总经理分管副总办公室公司各部门各工厂外单位 节点 A B C D E F 1 开始 起草文件起草文件起草报告/请示 2 是是否需3 要会签 否 4 签发文件会签审查、编号审定 印刷打印文件 5 6 下发文件 文件存档执行文件执行文件 7 文件定期整理 8 9 接收文件处理审定发送文件签发 执行领导批示 10 转发、传阅 11 文件存档 文件定期整理 12 结束 13 编制单位签发人密级 下面红色为工作计划模板,不需要的下载后可以编辑删除~谢谢 工作计划

一、近期 今年是在新的工作岗位工作的年,是熟悉工作,履职,方法,积累经验的一年,年中“转变,”,即转变工作角色,工作职责。 转变工作角色:参加工作近十年了,从事的工作一直都单一,以至于对行业的工作所知甚少,以至陌生,县办公室全县的核心机构,工作涉及到全县各行各业,对此,在思考问题,事情时,跳出以前在的思维,摆正的位置,全局意识,转变工作角色。 工作职责:办公室对工作安排,尽快熟悉的工作和职责,熟悉县办公室的规章制度,工作要求;熟悉县办公室总体工作及年初工作,工作任务;三虚心办公室同志的,善于学习、勤于思考,在干中学、学中干,工作的运行和问题的程序;四要与科室同志总结前期工作,工作努力方向。 二、中期 在工作职责、工作任务,熟悉工作方的前提下,明年,自身锤炼,政治素质、能力、工作绩效“三个提升”。 提升政治素质:要善于从政治角度看问题。面临的情况多么,要从政治角度分析判断问题,清醒头脑。二要政治敏锐性。密切关注时事、时事,网络、报刊、电视等,敏锐把握方针政策动向,工作的性。要高尚的政治品格。眼界宽广、胸襟广阔、淡泊名利、甘于奉献、原则。 提升能力:提升写作能力。理论学习,注重平时公文写作中的锻炼,注意办公室同志撰写材料的学习,能交办的新文件拟稿任务。提升语言表达能力。说话训练,汇报工作、简洁、清楚。提升办事能力。领会工作内容,勤于思考,能工作职责或交办要求,的任务。 提升工作绩效:虚心、同志、等对工作的意见和建议,总结经验教训,工作,优质的工作。调研、信息报送等工作,能超额办公室下达的工作。

程序文件流程图2(doc 37页)

程序文件流程图2(doc 37页)

目录 8.2.3.4 a. 质量手册编号 (4) 8.2.3.4 b. 程序文件编号 (4) 8.2.3.4 d. 质量记录编号 (5) 8.2 附图1:组织(及所属部门)制订、发放的文件受控流程图 (6) 8.2 附图2:外来受控文件受控流程图 (8) 8.3.2 质量记录控制流程图 (10) 8.4.2 内部质量审核工作流程图 (13) 8.5.2 6.10 进货检验的不合格品控制程序 (13) 8.5.2 6.10 产品已交付和使用时发现的不合格品控制程序 (14) 8.5.2 产品最终检验的不合格品控制程序流程图 (17) 8.5.2 产品实现过程中不合格品控制程序流程图 (19) 8.6.2 A 类纠正措施流程图 (21) 8.6.2 B 类纠正措施 (24) 8.6.2 C 类纠正措施 (26) 8.7.2 《质量情况通报》的编制、发放、回收、处理 (28) 8.7.2 财务状况预警系统 (30) 8.7.2 预防措施的制订、实施和评价 (32)

8.8.2 管理评审控制程序流程图 (34) 8.9.2 人员招聘录用程序流程图 (36) 8.9.2 培训程序流程图 (38) 8.9.2 考核程序流程图 (40) 8.11.2 产品实现过程策划程序流程图 (42) 8.11.2 策划依据 (44) 8.12.2 产品要求的识别与评审过程 (47) 8.12.2 产品合同修改过程 (48) 8.12.2 市场信息控制过程 (50) 8.13.2 设计和开发控制程序 (51) 8.14.2 采购控制程序流程图 (54) 8.15.2 生产运作程序流程图 (56) 8.17.2 测量和监控策划程序 (57) 8.18.2 体系业绩的测量和监控过程程序 (59) 8.19.2 过程的测量、监控和分析程序流程图 (61) 8.20.2 产品测量和监控程序流程图 (63) 8.21.2 持续改进过程控制程序 (65)

相关主题
文本预览