http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 8474|回复: 5

[C#语言基础] C#中一些关键字和罕见类(@,is,as,sizeof,typeof,checked,unchecked)的使详解

[复制链接]
发表于 2013-9-12 15:22:28 | 显示全部楼层 |阅读模式
C#中一些关键字和罕见类(@,is,as,sizeof,typeof,checked,unchecked)的使详解
先来看看我们都要说那些

  • @
  • is
  • as
  • sizeof
  • typeof
  • checked
  • unchecked
  • Guid
  • ?
  • ??
  • ::
  • =>
  • ref
  • out
  • params
  • using
  • this


         说起C#里面的关键字,我一直认为有些就是从Java或者是C++里抄过来的,有的只是为了解决自身的Bug,根本就不是语言之初设计的,仅仅是为了解决一个暂时无法解决的问题,而这些关键字的用法和使用频率是不高的, 因为他们只适用于特殊场合。

       下面跟我一起来熟悉这十六个关键字和一个不常用的类Guid吧。

1、@

在处理字符串时,那些个字符串转义字符我们可以使用这个,那@就是为解决这个而诞生的,直接让字符串原样输出有木有?什么sql字符串了,还有路径啥了的,统统搞定

[code=csharp]string sql = @"select * from student where id = '001'";
//实际sql输出select * from student where id = '001'
string path = @"C:\MDocu\student.xml";
//实际path输出C:\MDocu\student.xml,注意这里可不是\\哦[/code]

如果字符串里边包含双引号时,要稍微处理一下,那就是在双引号的外边再加双引号即可

[code=csharp]string s = @"He said,""yes""";
//s输出He said,"yes"[/code]

2、is

目的就一个,检查变量是不是给定的类型,是就返回true,不是就false了,比较简单,一笔带过了

[code=csharp]int i = 5;
bool check = i is int;//check = true[/code]

3、as

用于在兼容的引用类型之间执行转换。例如
[code=csharp]string s = someObject as string;
if (s != null)
{
    // someObject is a string.
}[/code]
as运算符类似于强制转换操作;但是,如果转换不可行,as会返回null而不是引发异常。更严格地说,这种形式的表达式 等效于
[code=csharp]expression is type ? (type)expression : (type) null[/code]
as 运算符只执行引用转换和装箱转换。as运算符无法执行其他转换,如用户定义的转换,这类转换应使用cast表达式来执行。
4、sizeof
用于获取非托管类型的大小(以字节为单位)
[code=csharp]int intSize = sizeof(int);//intSize = 4[/code]
5、typeof
返回Type对象,该对象保存类型信息
[code=csharp]Type myType = typeof(int);
console.writeline("Type:{}",myType);
//输出Type:System.Int32[/code]
6、checked
检测操作的溢出情况
[code=csharp]short a =20000,b=20000;
short myShort = checked((short)(a+b));
//error[/code]
7、unchecked
忽略溢出关键字,接受结果而不管溢出情况,默认是不检查溢出的
[code=csharp]short a =20000,b=20000;
short myShort = checked((short)(a+b));
//忽略error[/code]
8、Guid
全局唯一标示符,是一个128位的字符串,在任何要以唯一方式来表示某个事物时就可以用该屌丝。
[code=csharp]uniquecode = Guid.NewGuid ();
console.WriteLine("myCode:{}",uniquecode.ToString());
//输出:myCode:cabfe0ba-fa72-4c5c-969f-e76821949ff1[/code]
9、?
可空类型
[code=csharp]public class student
{
     private string name;
     private int? age=null;
     public string Name
     {
         get { return name; }
         set { name = value; }
     }
     public int? Age
     {
         get { return age; }
         set { age = value; }
     }
}
student s = new student();
s.Age = null;//是允许的[/code]
10、??
null接合操作符,也可以说是双问号操作符,意思是取所赋值??左边的,如果左边为null,取所赋值??右边的
[code=csharp]DateTime? createDate = null;
DateTime? defaultDate= null;
DateTime secondDate = DateTime.Now;
createDate = createDate ??defaultDate??secondDate;

// 如果createDate 为空,则对defaultDate求值,如果defaultDate不为空,则将defaultDate赋值给createDate 。否则继续计算secondDate,是不是null都赋值给createDate ,因为是最后一个表达式[/code]
11、::
这个东东比较少见,你可以叫它双冒号运算符,这个在给命名空间起别名的时候能用到
在此示例中,命名空间 System 用于包括类 TestClass,因此必须使用 global::System.Console 来引用 System.Console 类,该类被 System 命名空间隐藏。 而且,别名 colAlias 用于引用命名空间 System.Collections;因此,将使用此别名而不是命名空间来创建 System.Collections.Hashtable 的实例。
[code=csharp]using colAlias = System.Collections;
namespace System
{
    class TestClass
    {
        static void Main()
        {
            // Searching the alias:
            colAlias::Hashtable test = new colAlias::Hashtable();

            // Add items to the table.
            test.Add("A", "1");
            test.Add("B", "2");
            test.Add("C", "3");

            foreach (string name in test.Keys)
            {
                // Searching the global namespace:
                global::System.Console.WriteLine(name + " " + test[name]);
            }
        }
    }
}


[/code]
12、=>
Lambda表达式的运算符是=>,运算符左边列举出了需要的参数,右边定义了赋予Lambda变量的方法的实现代码
[code=csharp]

List<User> user = new List<User>{ new User{Id=1,Name="LiSi",Age=22},  new User{Id=2,Name="ZhangSan",Age=25} };
//获取特定人时所用的过滤条件,p参数属于User类型  
var results = user.Where(p => p.Name == "LiSi").ToList();  //用User对象的Age值计算平均年龄  
var average = user.Average(p => p.Age); [/code]
13、ref
ref 关键字使参数按引用传递,也就是说它能够让你直接对原数进行操作,而不是对那个原数的Copy进行操作。若要使用 ref参数,则方法定义和调用方法都必须显式使用 ref 关键字,而且传递到 ref 参数的参数必须最先初始化,例如:
[code=csharp]class RefExample
{
static void Method(ref int i)
{
i = 44;
}
static void Main()
{
int val = 0;
Method(ref val); // val is now 44   
}
}[/code]
14、out
out是传出参数,与ref有点像,但偏重于输出,而且不用初始化,通过执行使用out参数的方法逻辑,out后面的数接受并返回这个值,比如你写一个方法返回dataset,同时你还想返回页数,怎么办?方法一般不能返回多个值啊,这个时候out就可以返回多个值,是不是很爽,你需要多个值得时候别忘了out这厮啊
[code=csharp]public DataSet getData(out int count)
{
    dataset ds=bll.getdata(10,20);
获取第11条到第20条数据,但是不可能只显示共有10条记录吧,那么我们就可以用out了
    int rcount=bll.GetCount();//比方说这个是取总记录数的
    count=rcount;

    return ds;
}

//显示的时候

public void showdata()
{
    int count=0;

    gridview1.datasource=getData(out count);
    gridview1.databind();
   label1.text="共有"+count.tostring()+"条记录";
} [/code]
15、params
params主要的用处是在给函数传参数的时候用,就是当函数的参数不固定的时候。在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字!
注意事项:
(1)若形参表中含一个参数数组,则该参数数组必须位于形参列表的最后;
(2)参数数组必须是一维数组;
(3)不允许将params修饰符与ref和out修饰符组合起来使用;
(4)与参数数组对应的实参可以是同一类型的数组名,也可以是任意多个与该数组的元素属于同一类型的变量;
(5)若实参是数组则按引用传递,若实参是变量或表达式则按值传递。
(6)用法:可变的方法参数,也称数组型参数,适合于方法的参数个数不知的情况,用于传递大量的数组集合参数;当使用数组参数时,可通过使用params关键字在形参表中指定多种方法参数,并在方法的参数表中指定一个数组,形式为:方法修饰符 返回类型 方法名(params 类型[] 变量名)
如带有参数的SQL 语句,不同的表的字段数量也不同,当你更新修改的时候就可以用params


16、using

这个再也熟悉不过了,常见三种用法

(1)引用命名空间,例如:

[code=csharp]using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;[/code]

(2)创建别名(类或者命名空间的别名)

[code=csharp]using MyControle=System.Console;
class UsingEx
{
   public static void Main()
   {
    MyConsole.WriteLine("应用了类的别名");
    }
}[/code]

(3)自动清理资源

[code=csharp]using (SqlConnection conn = new SqlConnection(_connstr))
//这样你就不用手工清理连接资源了[/code]

17、this

(1)表示当前实例

(2)索引器关键字

(3)隐藏父类同名方法的关键字

(4)扩展方法的关键字

也没什么难的,多用用就会了

那些年我们追过的奇葩关键字远不止这些,真是浪花一朵朵,我也只是想到了这些,真碰到没见过的,查查也就知道了,没必要纠结,想必看完了这篇大家依然很忐忑,其实也不是坏事,呵呵,说明咱们的求知欲很强烈啊,我也只能说继续忐忑,继续加油,最后依然忐忑,因为你在忐别的忑啊~


参考文章 http://www.cnblogs.com/WeiGe/p/3315807.html





本帖被以下淘专辑推荐:



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-9-12 15:23:21 | 显示全部楼层
沙发
回复

使用道具 举报

发表于 2013-9-12 15:34:45 | 显示全部楼层
还有板凳麽?
见好收了
发表于 2013-12-29 08:31:54 | 显示全部楼层
好的东西一起分享,真的很好
发表于 2014-1-2 16:44:20 | 显示全部楼层
受教了,学习中……
发表于 2014-5-7 15:58:21 | 显示全部楼层
受教了,学习中……
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-24 18:28

© 2014-2021

快速回复 返回顶部 返回列表