C# 基础知识 (二).独特的知识及用法篇

在C#中有一些我自己认为比较独特的知识点,这些知识点是我经常使用的知识,但对它们的了解还是比较少的,所以通过查找资料学习,总结了这些独特的知识点并简单叙述,希望对大家有所帮组!其中主要有:var关键字、try..catch..finally、foreach语句、ArrayList类、#region..#endregion等知识点。

一.var关键字

隐含类型,使用var来声明任意类型的局部变量。在C#中它仅仅是一个关键字,不代表一种新的类型,它仅是负责告诉编译器:该变量需要根据初始化表达式来推断变量的类型,而且只能是局部变量。Var声明变量后,变量类型就确定下来了,不会在变。例:

var str = “Hello world”;
//string类型,相当于 string str = “Hello world”

var request = (HttpWebRequest)WebRequest.Create(url);
//这是http网络编程中我使用的例子,var可用HttpWebRequest类型替换

二.try..catch..finally

用于处理异常,通常有三中异常处理语句:

(1).try…catch;                //处理异常

(2).try…finally;               //清除异常

(3).try…catch…finally;  //处理所有异常

try块中包含容易产生异常的代码,使用引发异常语句,接着捕获异常;try块中发生异常后跳转到catch异常处理程序,catch用于异常处理程序,通常格式为:catch(异常类
异常对象实例){…}



例1:(参考自《从零开始学C#》)

int [] nums = {1,2,3,4,5,6,7,8,9};  //定义整形数组
try
{
	for(int i=0;i<=num.Length;i++)
	{
		Console.Write(num[i].ToString()+” ”);
	}
}
catch(Exception ex)
{
	Console.Write(ex.Message.ToString());  //输入异常错误
}

Try语句捕获异常,由于数组索引从0开始遍历,用“<=”会遍历10次,多遍历一次,出现索引越界,跳转到catch语句先创建一个异常的对象ex并输出错误信息。运行结果如下图所示:

finally用于清除产生错误分配的资源,在使用try..catch..finally语句中即使引发异常,finally块中的代码也会被执行(始终执行),从程序中释放资源。try..catch..finally语句捕获错误、清除并执行应用程序,无论有没有异常都会执行,出现异常是执行顺序为:try->catch->finally;没有异常执行顺序为:try->finally。下面看一个实际工程中使用的例子:

例2:(这是我在C#网络编程中自己编写的代码)

try
{
	Stream=response.GetResponseStream();    //获取应答流
	…                                       //具体通讯浏览器操作
}
catch (Exception msg)
{
	MessageBox.Show(msg.Message);           //异常处理
}
finally
{
	stream.Close();                         //释放资源:关闭流操作
}

这是C#浏览器中出现异常情况(断开网络连接访问)执行结果如下图所示:

最后注意,处理异常会大大降低性能,所以不要将它用在控制正常程序流程中,如果有可能检测到代码中异常,请替代try..catch..finally操作。如在出发中除数不能为0这个异常我们可以用if判断不为0在进行除法操作,这样就实现了替换。(自定义异常throw这里我就不在介绍了)

三.foreach循环语句

foreach语句为数组或对象集合中的每一个元素重复一个嵌入语句组,用于循环访问集合以获取所需信息,需要调用IEnumerable接口,其格式:foreach(类型变量
in 集合) { … //操作}每执行一次,循环变量就依次取集合中的一个元素操作。foreach语句的主要特点是代码简洁,效率又高。

例1:(foreach语句简单迭代)

int [] nums = {1,2,3,4,5,6,7,8,9};  //定义整形数组
foreach(int i in nums)
{
	Console.WriteLine(i);            //循环输出数组
}
//相当于:for(int i=0;i<nums.Length;i++) {...}

注意:在如上述一维或多维数组遍历中,尽量使用foreach语句,他会自动检查数组的索引,使其不会出现越界错误。而在上面数组访问中for循环语句每执行一次都会对数组索引有效值进行判断是否越界(相当于使用if-else判断),foreach会避免这样情况相对效率较高。同时,如果采用多维数组操作foreach会更加方便,它只需一层循环,而for语句需要多层循环来执行。

例2:(foreach与for语句多维数组对比)

int [,] intArray = new int[4,4] {{5,2},{1,2},{3,4}…}
foreach(int i in intArray)
{
	Console.WriteLine(i);
}
//而采用for语句需要两层循环执行
for(int i=0;i<intArray.GetLength(0);i++)
	for(int j=0;j<intArray.GetLength(1);j++)
		Console.WriteLine(intArray[i,j]);

下面是foreach语句我在实际项目工程中的一个简单应用,代码如下:

例3:(foreach语句在实际工程中的简单应用)

int count = 0;                          //记录选中对象个数
public List<object> aryRects;           //存放所有Rectangle对象
public abstract class shape:Object {…}  //shape类:属性protected bool BSelected是否被鼠标选中
foreach(shape s in aryRects)
{
	if (s.BSelected)                 //如果被选中,count+1
	{
		count++;
	}
}

这是一个C#编写画图软件,通过判断在图上已经被鼠标左键选中的图形的个数及相应属性实现移动、删除等功能。运行结果如下:

显然,使用for想实现上面的功能是非常困难,甚至无法实现的,这就是foreach的好处及实际工程中的应用。foreach语句需要注意:这里的循环变量是一个只读型局部变量,如果尝试改变其值或删除会发生编辑错误。

foreach(int I in nums)
{
	i++;                 //不能修改值
	Console.WriteLine(i);
}
//它提示的错误信息为:i是一个foreach迭代变量,无法为它赋值
foreach(int I in nums)
{
	nums.Remove(i);      //不能删除值
	Console.WriteLine(i);
}

这只是我对foreach的一些简单认识,其中一些知识点及思想还引用了该文章,这是一篇非常优秀的关于foreach语句的文章,感谢原作者和转载作者:http://blog.csdn.net/huang7914/article/details/2296176

四.ArrayList类

数组通常大小固定后就不能更改,但C#提供了动态数组ArrayList类实现动态添加、插入或移除元素的方法,更加灵活的设置数组大小。在使用该类前必须要声明System.Collections命名空间,ArrayList的属性和方法如下:



ArrayList类属性表

(由于使用CSDN插入表格间距太大,不知道怎样设置行间距,才换成了图片格式,见谅!)

ArrayList类常用方法表

(上面的两个表格都转自孙景瑞的《从零开始学C#》,非常优秀的一本书籍,推荐大家看看,同时感谢作者,这里引用了他的知识结晶)

例:

ArrayList aryList = new ArrayList();
for(int i=0;i<4;i++)
{
    aryList.Add(i);                //使用add方法添加4个元素
}
Console.WriteLine("ArrayList动态数组中元素的个数为:"+aryList.Count);  //Count属性

string[] Str = {"abc","xyz"};
aryList.AddRange(Str);            //AddRange(数组名)将Str数组中所有元素添加到aryList动态数组末尾
Console.WriteLine("ArrayList动态数组中元素的个数为:"+aryList.Count);

aryList.RemoveAt(1);               //删除索引为1的元素(0开始索引)即:数字1(第二项)
aryList.Remove("abc");             //删除值第一个为”abc”的值

Console.WriteLine("遍历输出ArrayList动态数组中所有元素");
foreach(object list in aryList)    //遍历输出动态数组aryList中所有元素
{
	Console.WriteLine(list.ToString());
}

输出结果如下图所示:

五.#region..#endregion

C#中使用预处理指令可以禁止编译器编译代码的某部分,还可以禁止编译器与额外功能相关的代码,预处理指令的开头都是#符号,如:#define、#undef、#if、#elif、#else、#endif、#warning、#error、#regoin、#endregion、#line、#pragma。这里我主要想讲讲#region..#endregion的用法。

#region..#endregion指令用于将一段代码标记给指定名称的块,实现指定展开或折叠代码块。#region块必须以#endregion指令终止。格式为:#region
名称 ... #endregion.如下图所示:

 #region 属性
        //状态处理对应的操作菜单
        private ContextMenu menuDelSet;
        private MenuItem menuSet;
        private MenuItem menuDel;
        private MenuItem dynamicModel;

        public LoadData loadData;
        public List<object> aryRects;          //存放所有Rectangle对象
        private List<object> aryLines;         //存放所有Line对象
        public List<VarBase> varList;          //存放所有的变量

        private List<int> usedModelID;         //已使用的模型ID
        private List<int> toUseModelID;        //可用的模型ID

        //Undo or Redo 规定只保存5次
        private UndoBuffer undoB;

        private shapeRect gRect = null;        //在Form中被选中的唯一,模型;
        private shapeRect gFrom = null;
        private shapeRect gTo = null;          //画线时的from 和 to
        private shapeLine gLine = null;

        private Point firstStart;
        private Point lastStart;               //记录鼠标起始位置

        private const int iRectW = 80;         //状态对象矩形的宽度;
        private const int iRectH = 40;         //状态对象矩形的高度;

#endregion

使用它的优点是可以被某些编译器识别,包括Visual Studio .NET编译器,这些编译器可以使用这些指令使代码在屏幕上更好地布局,能隐藏代码便于管理和查看,如下图所示是在工程中隐藏了相应部分功能代码的例子,给人一目了然的感觉。

希望这些知识点能帮助巩固和学习C#知识,同时这仅仅是我在学习C#中遇到的自认为比较特殊的知识点,如果叙述中有错误或不足之处见谅!不太会排版,见谅!

(By:Eastmount 2013-8-25 夜1点http://blog.csdn.net/eastmount/)

时间: 2024-08-02 23:02:34

C# 基础知识 (二).独特的知识及用法篇的相关文章

(保存)C#基础概念二十五问

C#基础概念二十五问 注:本文部份资料来自网络,如有侵权,请与我联系,我会在第一时间声明引用或将其删除!     当初学 C# 时是找个人大概问了一下数据类型和分支语句就开始做项目了.这两天又全面的看了一下相关的基础知识(学而时习之嘛),总结了25个问题: 1.静态变量和非静态变量的区别?2.const 和 static readonly 区别?3.extern 是什么意思?4.abstract 是什么意思?5.internal 修饰符起什么作用?6.sealed 修饰符是干什么的?7.over

学习SEO一是基础,二是信心

摘要: 随着互联网的发展,seo这块成了热门行业,从事的人也越来越多,对于早期从事这个行业的朋友来说,已经站稳了脚步,做起来也游任有余,而对于一些刚步入行业的新人来说,可就没 随着互联网的发展,seo这块成了热门行业,从事的人也越来越多,对于早期从事这个行业的朋友来说,已经站稳了脚步,做起来也游任有余,而对于一些刚步入行业的新人来说,可就没那么轻松了,因为现在竞争的人也越来越多,个人觉得现在学习seo最主要的两点,一是基础,二是信心,没有基础的朋友,现在想通过自学可就没那么容易了,虽然很多知识都

政府知识管理与企业知识管理的异同性

在公共部门中,公共服务组织以服务公.企业和其它社会团体为目标,因此在日常工作中需要处理大量的数据.信息和知识.尤其是在非程序化的决策中,对知识的依赖程度更加强烈.因此,正如wiig所言,公共服务组织是最迫切需要引入知识管理的公共部门.正因为此,以下的比较分析都是针对公共服务组织与企业而展开的. 目标 在企业里,知识管理的目标是通过将知识与产品相结合以及通过知识的运用提高决策水平和http://www.aliyun.com/zixun/aggregation/7432.html">解决问题的

理财通(华夏基金)知识荟萃(基本知识、怎么用、风险及风险规避、收益)

理财通(华夏基金)知识荟萃包括基本知识.怎么用.风险及风险规避.收益等. 理财通(华夏基金)基本知识 理财通基金名称叫"华夏财富宝货币",基金代码是000343.基金由工商银行委托华夏基金管理. 本基金主要投资于固定收益类金融工具,力求安全性的前提下,追求稳定的绝对回报. 理财通(华夏基金)怎么用 第一步:打开您的微信,找到理财通,并将您的银行卡与其绑定. 第二步:输入您要购买的金额,点击"存入". 第三步:输入您的姓名.证件号码及绑定的银行卡登记电话号码,确认后,

Bootstrap &lt;基础十二&gt;下拉菜单(Dropdowns)

原文:Bootstrap <基础十二>下拉菜单(Dropdowns) Bootstrap 下拉菜单.下拉菜单是可切换的,是以列表格式显示链接的上下文菜单.这可以通过与 下拉菜单(Dropdown) JavaScript 插件 的互动来实现. 如需使用下列菜单,只需要在 class .dropdown 内加上下拉菜单即可.下面的实例演示了基本的下拉菜单: <!DOCTYPE html> <html> <head> <title>Bootstrap

java 算法基础之二快速排序算法

http://www.cnblogs.com/hexiaochun/archive/2012/09/03/2668324.html java 算法基础之二快速排序算法 所谓的快速排序的思想就是,首先把数组的第一个数拿出来做为一个key,在前后分别设置一个i,j做为标识,然后拿这个key对这个数组从后面往前遍历,及j--,直到找到第一个小于这个key的那个数,然后交换这两个值,交换完成后,我们拿着这个key要从i往后遍历了,及i++;一直循环到i=j结束,当这里结束后,我们会发现大于这个key的值

Google为知识图添加健康知识,搜索结果将直接回

摘要: Google的官方博客今天刊登了产品经理Prem Ramaswami的文章,称搜索巨头已为其知识图(Knowledge Graph)添加了更多的医疗保健知识,几天后用户搜索医疗相关问题时将可以获得直接回答. 人 Google的官方博客今天刊登了产品经理Prem Ramaswami的文章,称搜索巨头已为其知识图(Knowledge Graph)添加了更多的医疗保健知识,几天后用户搜索医疗相关问题时将可以获得直接回答. 人生有很多要素,包括金钱.地位.财富.事业.家庭.子女等等,但是在所有这

百度知道开放平台:当知识大陆遇上知识岛屿

中介交易 SEO诊断 淘宝客 云主机 技术大厅 种种迹象表明,中文互联网的信息分享体系迎来一个新的变革期,这一次,开放的力量将得到最大体现. 日前,全球最大中文互动问答平台百度知道公布了"开放平台"计划,通过与各领域专业网站进行品牌.技术.资源合作,互利共赢,将信息的触角伸向互联网的每一个角落,打造密集型.高渗透的知识分享生态链,造福亿万网民. 在此之前,百度知道用了5年,已占据了近80%的知识问答市场,化身为"知识大陆".随着"知识大陆"与互联

“亚运知识总动员”校园亚运知识竞赛启动仪式在广州启动

本报讯(记者/谭亦芳实习生/岳伍东通讯员/亚组宣)昨日,"亚运知识总动员"校园亚运知识竞赛启动仪式在广州"活力天地"国际运动名店城举行."亚运知多少"网络大赛活动也从即日起面向全国公众正式推出. 据介绍,"亚运知识总动员"知识竞赛旨在通过亚运知识竞赛,营造良好的亚运知识学习氛围,提高广大市民支持广州亚运会.参与广州亚运会的积极性.在昨日的活动现场,还举行了广州亚运知识闯关竞赛,吸引了众多市民踊跃参与. 记者同时从广州亚组委获悉