一些不常见的C#关键字介绍

转自51CTO

 

【51CTO独家特稿】本文的第一部分介绍没有文档记载的关键字,笔者保证这些C#关键字你肯定没有见到过,即使你去MSDN文档中找也没有,这些C#关键字也没有出现在Visual Studio的intellesence菜单中。

第二部分介绍有文档记载但不常用的C#关键字,或只不过是引入C#中的关键字,这些C#关键字在MSDN文档中是可以找到的。

我也为本文所涉及到的一些C#关键字制作了一些简单的例子,如果你有兴趣去测试,可以从http://www.codeproject.com/KB/Blogs/38695/UncommonTestSample.zip下载源代码。

无文档记载的C#关键字

1、__arglist

__arglist用于向一个函数发送一个参数,我们向函数发送参数的常规做法是在函数头指定一个参数列表,如果要向函数追加一个新参数,需要函数重载才行,如果要发送多个参数,可以使用参数数组。
那么我们为什么要使用__arglist呢?上面任何一种传递参数的方法都存在如下问题:
A)  如果我们使用函数重载,我们不得不为新增加的参数设计新的函数。
B) 如果我们使用参数数组,那参数类型必须相同,或者需要参数数组对象。
但__arglist不需要这么复杂,可以传递任何数量的参数给函数,可以是任何的类型,让我们看一段代码:

   1. public int paramLength(__arglist)  
   2. {  
   3.           ArgIterator iterator = new ArgIterator(__arglist);  
   4.           return iterator.GetRemainingCount();  
   5. }

下面我调用这个函数:

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

变量x将返回5,因为我们发送了5个参数给函数,我们可以使用下面的方法访问每一个函数:

   1. TypedReference tf = iterator.GetNextArg();  
   2. TypedReference.ToObject(tf)

每调用一次GetNextArg,GetRemainingCount就会减少1,直到每个对象设置的迭代次数用完。

2、__refvalue

__refvalue从一个引用对象匹配值,可以使用它从TypedReference对象中获得真实的对象,它需要两个参数,一个是TypedReference对象,一个是要转换的类型,看下面的代码:

   1. int tfValue = __refvalue(tf, int);

执行后tfValue将被分配tf指向的整数值。

3、__makeref

__makeref可以从对象自身中提取出TypedReference对象,它和__refvalue刚刚相反,来看下面的代码:

   1. string name = "Ayan";  
   2. TypedReference tf = __makeref(name);

4、__reftype

__reftype用于从TypedReference获取Type对象,看下面的代码你就知道怎么回事了:

   1. Type t = __reftype(tf);  
   2. if(t.ToString().equals("System.String"))  
   3. string str = __refvalue(t,string);

注意:虽然我在所有C#版本中都发现了这些关键字,但我并没有将它们用于生产环境,我不能保证这些关键字在今后的版本是否会仍然存在,使用风险一切由你自行承担。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值