博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理
上一页 1 2 3 4 5 6 7 ··· 14 下一页

2012年12月26日

摘要: 类成员老田:类中的所有成员都可以声明为public或private。具体什么情况下该用哪一种这个就必须从类的成员的主要用途来说了。不同的用途所要使用的访问修饰符也会有区别。下面我们就类中的成员来分别说下吧。类中的数据和函数称为类的成员。Microsoft的正式术语对数据成员和函数成员进行了区分。除了这些成员外,类还可以包含嵌套的类型(例如其他类)。函数成员提供了操作类中数据的某些功能,包括方法、属性、构造函数和析构函数、运算符以及索引器。方法是与某个类相关的函数,它们可以是实例方法,也可以是静态方法。实例方法处理类的某个实例,静态方法提供了更一般的功能,不需要实例化一个类(例如Console. 阅读全文

posted @ 2012-12-26 13:50 天轰穿 阅读(291) 评论(0) 推荐(0) 编辑

2012年12月25日

摘要: 一点都不麻烦,它只是通过访问修饰符来控制的,我们昨天的例题中就用到过,public 就是一个,不过它的作用就是将成员完全公开出来。接下来我们看下全部访问修饰符。Public——允许任何人来访问。Internal——只要在同一个项目(不是解决方案)中均可访问。protected——继承时子类可以对基类有完全访问权。protected internal ——唯一的一种组合限制修饰符,它只可以被本组合体内所有的类和这些类的继承子类所存取。private——只允许同一个类中的成员访问。例:做一个商品出售的Demo ,界面如图4-14 图4-14创建一个Products的类,在Products.cs中添 阅读全文

posted @ 2012-12-25 13:21 天轰穿 阅读(502) 评论(0) 推荐(0) 编辑

2012年12月24日

摘要: 封装 小天:那是不是所有只要类中定义了的都会显示出来呢?老田:当然不是,C#可还有一个很重要的特性叫封装,通过这个机制,就可以控制那些被公开,那些私有了。这也就是我们前面看到的private、public这两个访问修饰符的功能了。但实际上访问修饰符还有几个,并不只是我们看到的这两个,下面分别来解释。为什么要封装 小天:等等,什么是封装,他和装箱、拆箱是什么关系? 老田:没有关系。装箱、拆箱我们在本书第二章中有讲到,自己去看。至于什么是封装,我们给你打个比方:“你去买一台笔记本,你只需要知道怎么开机,开关无线,屏幕是多大的,CPU多大频率,内存容量,硬盘容量等,至于数据如何被放到内存中,运算时如 阅读全文

posted @ 2012-12-24 14:03 天轰穿 阅读(287) 评论(0) 推荐(0) 编辑

2012年12月21日

摘要: 继续回答你的第二个问题:VS为什么自己就知道并智能显示user._age和user._name?因为当我们实例化了一个类对象之后,这个对象所属的类所具备的属性和方法这个对象也就具备了,而我们之前类库中建立的User类也定制了年龄和姓名两个字段,还有一个user.GetUser()方法。第三个问题:为什么赋给user._age的值还要转换给INT32类型呢?我们在User类中定义的_age字段是一个INT类型,这里要给这个int类型的字段赋值,所以必须将窗体上接受到的string类型的字符串转换为int类型;第四个问题:为什么user.GetUser() 这个不和上面两个一样,多了个括号呢?调用 阅读全文

posted @ 2012-12-21 15:07 天轰穿 阅读(300) 评论(0) 推荐(0) 编辑

2012年12月20日

摘要: 实例化就是创建对象的过程。使用new关键字可以建立类的一个实例,而我们这一句中小写的user 就是对象引用的名字。同理,我们还可以使用如下语法,实例化出更多的对象:User user = new User(); User user_a = new User(); User user_b; //创建对象引用 user_b = new User(); //创建对象这个前两句的意思是分别创建了user和user_a两个对象,第三和第四句是什么意思?对象与对象引用老田:这个问题我建议你再回去看下第二章关于引用类型的介绍。在第二章我们说到类是引用类型,而引用类型最大的特点是,申明变量其实只是创建了引用, 阅读全文

posted @ 2012-12-20 13:28 天轰穿 阅读(635) 评论(0) 推荐(0) 编辑

2012年12月18日

摘要: 第一个问题:这一句就是使用我们刚才创建的oop_demo类库里面的User类实例化一个名为user的对象,注意两个user的大小写不同的。老田,如果每一次我们使用类库中的类都要写类库名字,那会不会太麻烦了?首先要说明的是,我们使用的并不是类库名字,而是User类的命名空间,不过它们恰恰同名。至于什么是命名空间下面马上就会讲到,现在只要知道如果两个类之间的命名空间不同,如果要使用的话就都必须引入命名空间。不过上面也多次说到,引用还可以使用using关键字在类的顶部添加对某个命名空间的引用,注意到图4-13的第9句,有了这一句就可以在使用时直接写类名了,再不用在类名前加上命名空间了。图4-13知道 阅读全文

posted @ 2012-12-18 13:29 天轰穿 阅读(770) 评论(1) 推荐(0) 编辑

2012年12月17日

摘要: 我们就前面做的这个oop_demo类库中类的使用来做一个实例,然后进一步讲解吧。1. 因为目前解决方案中只有一个类库项目,还看不见解决方案名称,所以用vs2010左上角的【文件】菜单-【添加】-【新建项目】,如图4-10 图4-10完成后,第一件事就是为UserManager添加对oop_demo的引用。因为它们都在同一个解决方案中,可以以添加项目的方式添加。老田:接下来,可以直接在要使用该类库中某个类的文件上引用被引用类的命名空间。例如要使用4.2.3小节中创建的User类,首先得看该类的命名空间是什么。确认出User类的命名空间为oop_demo,有了这个信息之后,使用就比较明确了,看看怎 阅读全文

posted @ 2012-12-17 10:58 天轰穿 阅读(339) 评论(0) 推荐(0) 编辑

2012年12月14日

摘要: 老田:首先我们要生成项目,有两种方式:1. 顶部菜单的【生成–生成oop_demo (这里是随你项目名字变化的,例如“生成XXXX”)】;2. 在资源管理器中的项目名称上面点鼠标右键–生成;点击生成后,可以看到生成的dll所在的具体位置,如图4-10图4-10接下来我们就该谈到如何引用这个类库了。之前一直都看到using引用。注意,引用其实应该分两次来说。首先是项目中必须已经引用了要使用的类库项目或者已经生成的类库文件(通常是dll文件,类库直接生成的也是dll文件)。然后第二次引用是指将要使用的类库引用到当前类中,这个时候使用using关键字。小天:这个会不会存在重复引用?换句话说,我在类文 阅读全文

posted @ 2012-12-14 13:17 天轰穿 阅读(690) 评论(0) 推荐(0) 编辑

2012年12月13日

摘要: 小天:好难写啊,都不知道怎么开始。 老田:很简单,我们一个个的来分析。首先说商品这个类吧,因为没有特定的指定到底是那种商品,所以就抽出所有商品都有的共性。比如说商品名,商品价格,颜色(这个不一定都有,比如卖概念的)等等,还有很多你随便想就是了。想出这些特性后继续确定他们的数据类型。因为计算机表现出来的就是可描述的字符,所以商品名我们用string类型,价格用decimal类型。这些特性出来以后,接着就该想下商品的方法了。 小天:你不是说方法就是对象的动作嘛?这个商品哪里有动作呢?虽然汽车可以开,飞机可以飞。但是还是有很多商品不能动,比如电线杆、铁塔。 老田:我吐血。。。,你思维不要这么固化好不 阅读全文

posted @ 2012-12-13 13:39 天轰穿 阅读(1126) 评论(1) 推荐(0) 编辑

2012年12月12日

摘要: 接下来,我们删除Class1.cs,重新创建一个 User.cs 类,在资源管理器中的项目名称上面点鼠标右键–添加–类[或者新建项] –在模板框中选择类–名称修改为 User.cs 。在创建这个类之前,我们首先要明白的是:创建类的过程实际上是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法。类定义了每个类对象(称为实例)可以包含什么数据和功能。例如这个User类,我们假设只有用户名和年龄,而具体操作则是返回当前对象的详细信息,在类中代码如下:using System; //下面还有些引用的其它本类不必要的名称空间,被删除了namespace oop_demo{ public c 阅读全文

posted @ 2012-12-12 13:32 天轰穿 阅读(947) 评论(0) 推荐(0) 编辑

2012年12月11日

摘要: 创建类库项目好吧,我们就直接从创建一个带类库项目的解决方案开始吧。打开Visual Studio 2010,文件–新建项目 - 项目类型选择 Visual C# - 模板选择类库 - .net framework版本默认就是4.0,最低支持2.0 –下面部分一个名称是表示这个类库项目的名称、项目文件所在的位置以及解决方案的名称等(创建了这么多项目,总结下有什么区别?),如图4-3 图4-3项目属性点击确定之后得到如图4-4,如果看不见解决方案管理器,点击VS顶部菜单中“视图-解决方案资源管理器” 图4-4当我们创建一个新的类库项目之后,VS会默认创建一个Class1这样的类,如图4-3中... 阅读全文

posted @ 2012-12-11 14:54 天轰穿 阅读(3966) 评论(0) 推荐(0) 编辑

2012年12月10日

摘要: 类和结构实际上都是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法。类定义了每个类对象(称为实例)可以包含什么数据和功能。例如,如果一个类表示一个顾客,就可以定义字段CustomerID、FirstName、LastName和Address,以包含该顾客的信息。还可以定义处理存储在这些字段中的数据的功能。接着,就可以实例化这个类的对象,以表示某个顾客,并为这个实例设置这些字段,使用其功能。 class PhoneCustomer //关键字是class { public const string DayOfSendingBill = "星期日"; publi 阅读全文

posted @ 2012-12-10 15:55 天轰穿 阅读(484) 评论(0) 推荐(0) 编辑

2012年12月7日

摘要: 明白了,你的意思是我们把汽车当成一个软件产品,引擎就是其中一个对象?而整个汽车上就由N多的对象组成。其实你这话说对也可以说不对,我们认为对象是人们要进行研究的任何事物,不仅是前面说到的从最简单的整数和宇宙飞船等具体的事物可看作对象,还包括哪些抽象的规则、计划或事件。比如一张请假条,一个工资调整计划,一次会议记录等。对象是OOP应用程序的一个部件。它封装了这个应用程序的部分功能,而它可以是一条数据,一个数值或者一些更加抽象的实体。总之,在C#中,我们可以认为一切都是对象。对象的生命周期明白了,那前面说的生命周期是什么?在现实中,一辆汽车从生产出来到被报废就是一个生命周期。而在软件中任何一个对象也 阅读全文

posted @ 2012-12-07 13:56 天轰穿 阅读(453) 评论(0) 推荐(0) 编辑

2012年12月6日

摘要: 本章要点l 面向对象的编程简介:面向对象编程的特征,对象的生命周期,类和对象的关系l vs2008中的OOP工具:使用vs2008创建类库,使用类关系图l 类成员:通过实例讲解如何设计一个简单的类l 封装:为什么要封装,如何封装类和成员l 重载:运算符重载、方法重载、构造函数重载l 接口:定义及其使用l 继承:实现继承和接口继承,共享基类成员l 多态:虚方法和重写l 抽象方法:定义以及它与接口的异同l 命名空间:优缺点l 匿名类、部分类、扩展方法、结构、枚举本章学习线路我们首先从什么是面向对象编程开始介绍;接下来我们开始讲解如何利用Visual Studio 2010工具进行创建项目,创建类库 阅读全文

posted @ 2012-12-06 10:11 天轰穿 阅读(420) 评论(0) 推荐(0) 编辑

2012年12月5日

摘要: 所谓自定义异常是指我们继承c#中的异常类,如果希望用户能以编程方式区分一些错误条件,您可以创建自己的用户定义的异常。.NET Framework 提供根本上从基类 Exception 派生的异常类的层次结构。这些类中的每一个都定义一个特定的异常,因此在很多情况下只需捕捉该异常。您也可以通过从 Exception 类派生来创建自己的异常类。创建自己的异常时,好的编码做法是以“Exception”这个词作为用户定义的异常类名的结尾。小提示:关于类和构造函数的知识请参看下一章,而对于本节的内容,您也可以在下一章学完后再回头来学习。下面我们做一个实例,从定义自定义异常一直到捕获和处理:1. 创建名为“ 阅读全文

posted @ 2012-12-05 15:24 天轰穿 阅读(1116) 评论(0) 推荐(0) 编辑

2012年12月4日

摘要: 在C#中,要通知一个非正常情况,你可以使用 throw 关键字抛出一个异常。下面一行代码创建一个新的System.Exception实例,并将它抛出:throw new System.Exception();抛出的异常和所有自然引发的异常一样,立即将代码段挂起,并由CLR寻找一个异常处理者。如果要截取不同的异常并将它们作为单个异常类型全部返回到调用程序,使用 Throw 语句可以非常轻松地完成此操作。类中可以抛出异常,但是并不返回错误代码,且不输出错误信息,抛出特定的类型。通常 throw 语句与 try-catch 或 try-finally 语句一起使用。当引发异常时,程序查找处理此异常的 阅读全文

posted @ 2012-12-04 14:04 天轰穿 阅读(917) 评论(0) 推荐(0) 编辑

2012年12月3日

摘要: 在C#中,要通知一个非正常情况,你可以使用 throw 关键字抛出一个异常。下面一行代码创建一个新的System.Exception实例,并将它抛出:throw new System.Exception();抛出的异常和所有自然引发的异常一样,立即将代码段挂起,并由CLR寻找一个异常处理者。如果要截取不同的异常并将它们作为单个异常类型全部返回到调用程序,使用 Throw 语句可以非常轻松地完成此操作。类中可以抛出异常,但是并不返回错误代码,且不输出错误信息,抛出特定的类型。通常 throw 语句与 try-catch 或 try-finally 语句一起使用。当引发异常时,程序查找处理此异常. 阅读全文

posted @ 2012-12-03 13:16 天轰穿 阅读(417) 评论(0) 推荐(0) 编辑

2012年11月30日

摘要: 小天:通过刚才多次断点调试,我发现如果没有错误,则无论多少个catch块都不会执行。而发生错误后,它也不会挨个catch块去判断,而是直接找到对应的catch块。能不能详细跟我说下异常处理的系统流程。老田:好的,当你的程序遇到一个非正常情况,比如说内存不足,它就会引发(throw/raise)一个异常。此时,当前的过程调用将挂起,.NET 运行时(CLR)将从下至上搜索过程调用堆栈,以查找相应的异常处理程序。也就是说,如果抛出异常的代码正处于某个 Try 块中,运行时将首先使用本地的 Catch 块(如果有)来处理异常(它将执行在该位置找到的 Catch 块代码),否则这个程序段将被终止并将. 阅读全文

posted @ 2012-11-30 13:34 天轰穿 阅读(454) 评论(0) 推荐(1) 编辑

2012年11月29日

摘要: 小天:我觉得上面的实例还是不完美,因为在运行中出现错误的时候,我们只能获得一个我们自定义的警告信息,还有没有更好的解决方案呢?老田:当然有,那就是为每个可能的Exception定制解决方法。例如,上面的实例将有可能出现不同的Exception,我们则可以将Exception进行细分:类型有错误(FormatException)、超过数值范围(OverflowException)、无效输入(Exception ex),然后根据不同的Exception提出不同的解决方法。另外Exception 包含很多属性,可以帮助标识异常的代码位置、类型、帮助文件和原因:StackTrace、InnerExc. 阅读全文

posted @ 2012-11-29 13:42 天轰穿 阅读(981) 评论(0) 推荐(0) 编辑

2012年11月28日

摘要: 公共语言运行库提供一种异常处理模型,该模型基于对象形式的异常表示形式,并且将程序代码和异常处理代码分到 try 块和 catch 块中。可以有一个或多个 catch 块,每个块都设计为处理一种特定类型的异常,或者将一个块设计为捕捉比其他块更具体的异常。如果应用程序将处理在执行应用程序代码块期间发生的异常,则代码必须放置在 try 语句中。try 语句中的应用程序代码是 try 块。处理由 try 块引发的异常的应用程序代码放在 catch 语句中,称为 catch 块。零个或多个 catch 块与一个 try 块相关联,每个 catch 块均包含一个确定该块处理的异常类型的类型筛选器。在 t. 阅读全文

posted @ 2012-11-28 15:27 天轰穿 阅读(1061) 评论(0) 推荐(0) 编辑

2012年11月27日

摘要: 接着我们来说你最开始提出的那个关于提高用户体验的问题。根据你的描述,我们认为急需要修改的是当程序遇到错误之后不应该是直接中断,而是给出提示,并使得用户可以重新输入。在C#中错误和异常的解释是不一样的。异常是程序运行中发生的错误,异常处理是程序设计一部分。异常将导致不完善或者不需要的结果,因此在程序设计中需要处理异常。异常也可以是像"IndexOutOfBounds"(索引超过绑定)这样的错误,这个错误表示程序试图访问数组中不存在的元素;比如数组最大元素为100,当试图访问元素101时就将会发生这样的错误。但这些都是内建的异常,可以直接通过Exception基类处理,如果发生 阅读全文

posted @ 2012-11-27 14:12 天轰穿 阅读(459) 评论(0) 推荐(0) 编辑

2012年11月26日

摘要: 小天:什么是断点调试?还有什么是断点?还有断点调试中可以看见那些信息?老田:断点调试就是指让程序在我们指定的位置停下来,根据我们的要求去一行行的执行代码。而我们指定要停下来的这个点就是一个断点。断点调试的过程中,可以看到代码的状态改变情况(这里主要指局部变量的值改变),代码的运行顺序,调用堆栈的情况,被调试程序的输出信息等。不过在很长一段时间内,我们主要关心的都只是具备变量的改变和代码的执行顺序。要对一段程序进行断点调试,第一步是要设置断点。断点的数量没有限制,但有一点,断点一定是要打在可执行的代码上,比如注释上面、类外面都无法设置断点。这个不需要多详细的讲,你自己挨个去点就知道哪里设置得了, 阅读全文

posted @ 2012-11-26 14:19 天轰穿 阅读(648) 评论(0) 推荐(0) 编辑

2012年11月23日

摘要: 天轰穿C# -vs2010 - 03C#的异常处理之编写更高质量的代码 本章学习线路 本章由编写更高质量代码的常见规范开始。进一步讲到如何使用VS调试C#应用程序。这两点希望大家一定要用好用熟练。对于很多初学者来说,在一开始就知道代码的运行流程,这对后面的学习是相当有帮助的。接下来就是讲述.net中的异常处理、分别就简单的try/catch,多个catch块进行讲解。接着描述异常处理的系统流程。再后来就是讲解用于清理try语句中占用资源的Finally关键字、和显示抛出异常的Throw关键字。最后是针对用户自定义异常做了一个实例。鉴于自定义异常中涉及类的知识较多,所并未过度深入。 概述 小.. 阅读全文

posted @ 2012-11-23 14:21 天轰穿 阅读(607) 评论(0) 推荐(0) 编辑

2012年11月15日

摘要: if语句的功能比较多,是进行决策的有效方式。与?: 语句不同的是,if语句没有结果(所以不在赋值语句中使用它),使用该语句是为了有条件地执行其它语句 老田:那就需要用到if语句更为合适了。if语句的功能比较多,是进行决策的有效方式。与?: 语句不同的是,if语句没有结果(所以不在赋值语句中使用它),使用该语句是为了有条件地执行其它语句。 if语句最简单的语法如下: //第一种语法 if(逻辑表达式条件为真) 执行这里的代码,前提是这里的代码只有一行,就可以不用花括号 //第二种写法 if(逻辑表达式条件为真) { 执行这里的代码 ... 阅读全文

posted @ 2012-11-15 09:21 天轰穿 阅读(980) 评论(0) 推荐(0) 编辑

2012年11月14日

摘要: 用于获取 值类型 的字节大小。例如,可以如下所示检索 int 类型的大小: int intSize = sizeof(int); Console.WriteLine(intSize); sizeof 运算符仅适用于值类型,而不适用于引用类型。 不能重载 sizeof 运算符。由 sizeof 运算符返回的值是 int 类型。下表显示表示某些预定义类型大小的常数值。表达式结果sizeof(sbyte)1sizeof(byte)1sizeof(short)2sizeof(ushort)2sizeof(int)4sizeof(uint)4sizeof(long)8sizeof(ulon... 阅读全文

posted @ 2012-11-14 09:39 天轰穿 阅读(292) 评论(0) 推荐(0) 编辑

2012年11月13日

摘要: 如果所提供的表达式非空,并且所提供的对象可以强制转换为所提供的类型而不会导致引发异常,则 is 表达式的计算结果将是 true。 检查对象是否与给定类型兼容。例如,以下代码可以确定对象是否与 string 类型兼容: object obj="哇哈哈哈哈哈"; if (obj isstring) { ....... } 如果所提供的表达式非空,并且所提供的对象可以强制转换为所提供的类型而不会导致引发异常,则 is 表达式的计算结果将是 true。 如果已知表达式将始终是 true 或始终是 false,则 is 关键字将导致编译时警告,但是,通... 阅读全文

posted @ 2012-11-13 09:51 天轰穿 阅读(249) 评论(0) 推荐(0) 编辑

2012年11月9日

摘要: 直到现在,我们一直在使用简单的=赋值运算符,其实还有其它赋值运算符,而且它们都非常有用。除了=运算符外,其它赋值运算符都以类似的方式工作。 与=一样,它们都是根据运算符和右边的操作数,把一个值赋给左边的变量。下表列出了这些运算符及其说明。 运算符 类 别 示例表达式 结 果 =二元 var1 = var2; var1被赋予var2的值 += 二元 var1 += var2; var1被赋予var1与var2的和 -= 二元 var1-= var2; var1被赋予var1与var2的差 *= 二元 var1 *= var2; var1被赋予var1与var2的乘积 /=二元 ... 阅读全文

posted @ 2012-11-09 10:11 天轰穿 阅读(230) 评论(0) 推荐(0) 编辑

2012年11月8日

摘要: 在计算表达式时,每个运算符都会按顺序处理。但这并不意味着从左至右地运用这些运算符。 例如,有下面的代码: var1 = var2 + var3; 其中+运算符就是在=运算符之前进行计算的。在其它一些情况下,运算符的优先级并没有这么明显,例如: var1 = var2 + var3 * var4; 其中*运算符先计算,其后是+运算符,最后是=运算符,这是标准的数学运算顺序,其结果与我们在纸上进行算术运算的结果相同。 像这样的计算,可以使用括号控制运算符的优先级,例如: var1 = (var2 + var3) * var4; 括号中的内容先计算,即+运算符在*运算符之前计算。... 阅读全文

posted @ 2012-11-08 09:54 天轰穿 阅读(257) 评论(0) 推荐(0) 编辑

2012年11月7日

摘要: 考虑下述情形:要根据变量var是否小于10,来确定是否执行代码。为此,需要确定语句"var小于10"的真假(小于为真,既true;不小于则为假,既false),即需要知道比较的布尔结果 布尔比较需要使用布尔比较运算符(也称为关系运算符),如下表所示。这里var1都是bool类型的变量,var2 和 var3则可以是各种类型。运算符类别示例表达式结果==二元var1 = var2== var3;如果var2等于var3,var1的值就是true,否则为false!=二元var1 = var2 != var3;如果var2不等于var3,var1的值就是true,否则为fals 阅读全文

posted @ 2012-11-07 09:54 天轰穿 阅读(1739) 评论(0) 推荐(0) 编辑

2012年11月6日

摘要: 由于本章是属于本书的最最最基础部分,所以我们在讲述知识的同时也很注重学习方法和Visual Studio等工具的使用说明。 显示转换就需要特殊类或者方法来辅助完成了。例如 long lo = 1; //申明一个long类型变量 byte b = Convert.ToByte(lo);//使用Convert类转换 short sh = (short)lo; //使用强类型转换 int i = int.Parse(lo.ToString());//使用类型中的Parse方法转换 从上面的例子来看,我们应该很容易想到一个比较严重的问题。因为上面都是缩小转换。那... 阅读全文

posted @ 2012-11-06 09:40 天轰穿 阅读(591) 评论(1) 推荐(0) 编辑

2012年11月5日

摘要: 接下来我们看下面试题中出现率非常高的一个知识点,装箱和拆箱。其实这个知识点对于实战来说,好像没有什么用处。可为什么企业在面试中会常常提到呢? 首先明白这两个概念: 装箱:将值类型转换为引用类型。 拆箱:将引用类型转换为值类型。 最常见的装拆箱是发生在值类型和object类型之间,例如: int i = 10; object o = i; 装箱和拆箱(unboxing)可以把值类型转换为引用类型,或把引用类型转换为值类型。装箱用于描述把一个值类型转换为引用类型。运行库会为堆上的对象创建一个临时的引用类型"box"。该转换是隐式进行的,如上面的例子所述。 拆箱用于描述相反的过程 阅读全文

posted @ 2012-11-05 09:50 天轰穿 阅读(310) 评论(0) 推荐(0) 编辑

2012年11月1日

摘要: 前面介绍了变量、数据类型、类型安全等,我们看到使用了赋值运算符"="。其实在C#中还包含许多进行这类处理的运算符。 把变量和字面值(在使用运算符时,它们都称为操作数)与运算符组合起来,就可以创建表达式,它是计算的基本建立块。 运算符的范围非常广泛,有简单的,也有非常复杂的,其中一些可能只在数学应用程序中使用。简单的操作包括所有的基本数学操作,例如+运算符是把两个操作数加在一起,而复杂的操作则包括通过变量内容的二进制表示来处理它们。还有专门用于处理布尔值的逻辑运算符,以及赋值运算符,如=运算符。 下面我们先介绍数学和赋值运算符,而逻辑运算符将融合在流程控制的小节中介绍,因为逻 阅读全文

posted @ 2012-11-01 09:26 天轰穿 阅读(402) 评论(0) 推荐(0) 编辑

2012年10月31日

摘要: 有5个简单的数学运算符,其中2个有二元和一元两种形式.下表列出了这些运算符,并用一个示例来说明它们的用法,以及使用简单的数值类型(整数和浮点数)时它们的结果 运算符 类别 示例表达式 结 果 + 二元 var1 = var2 + var3; var1的值是var2与var3的和 -二元 var1 = var2-var3;var1的值是从var2减去var3所得的值 *二元var1 = var2 * var3; var1的值是var2与var3的乘积 / 二元var1 = var2 / var3; var1是var2除以var3所得的值 % 二元 var1 = var2 % va... 阅读全文

posted @ 2012-10-31 09:19 天轰穿 阅读(916) 评论(0) 推荐(0) 编辑

2012年10月30日

摘要: 上面已经说到,隐式转换就是不需要什么语法申明,例如: byte bt = 1; short s = 35; int x = bt; //将byte类型直接交给int类型,这就是一次隐式转换 int y = s; //同上 转换有一个前提,那就是只要能保证值不会发生任何变化,类型转换就可以成功进行。但是,在转换之前编译器会判断一次,这个判断是不管值是否能够保证的。编译器只看类型的大小。所以隐式转换的前提是,位数小的类型向大的转换,且能够保证值不发生变化就可以自动转换。 上面两个实例你应该看出来了,都是扩大转换。比如下面实例,将int类型的转换为byte类型这样的缩小转换,要想也隐... 阅读全文

posted @ 2012-10-30 09:19 天轰穿 阅读(1637) 评论(0) 推荐(0) 编辑

2012年10月29日

摘要: 从工具箱中拖四个Label控件到接口上,并分别修改Text属性为"姓名:、年龄:、结果:和消息",注意最后一个Label(就是Text属性为"消息"这个Label控件的NAME属性); 小天:这么多数据类型,它们之间一定会有混合使用的时候。比如我们让用户输入用户名和年龄,然后显示出结果。 老田:你说的这个最好使用WinForm来做。因为这只是第二次做,我们把步骤说下: 1.创建一个名为"类型转换和装拆箱"的Windows桌面应用程序项目; 2.从工具箱中拖四个Label控件到接口上,并分别修改Text属性为"姓名:、年龄:、 阅读全文

posted @ 2012-10-29 09:38 天轰穿 阅读(311) 评论(0) 推荐(0) 编辑

2012年10月23日

摘要: 小天:我昏了,我已经昏了,上面出现好多的"后面讨论"。这个怎么学啊。还有数据类型,我感觉也很迷糊。 老田:对于前面的知识点,特别是那些例题,并不要求你现在就搞清楚。只要你能够明白例题中所阐述的效果,然后记住这些概念。下面我们就来学习C#中的预定义数据类型。 与其它语言相比,C#对其可用的类型及其定义有更严格的描述。 在开始介绍C#中的数据类型之前,理解C#把数据类型分为两种是非常重要的: ●值类型 ●引用类型 下面几节将详细介绍值类型和引用类型的语法。从概念上看,其区别是值类型直接存储其值,而引用类型存储对值的引用。 本文为天轰穿原著,转载请注明出处及作者! 阅读全文

posted @ 2012-10-23 10:00 天轰穿 阅读(236) 评论(0) 推荐(0) 编辑

2012年10月22日

摘要: 这两种类型存储在内存的不同地方:值类型存储在堆栈中,而引用类型存储在托管堆上。注意区分某个类型是值类型还是引用类型,因为这种存储位置的不同会有不同的影响。 例如,int是值类型,这表示下面的语句会在内存的两个地方存储值20: using System; namespace预定义类型 { classProgram { staticvoid Main(string[] args) { int i = 20; int t = i; //将i的值赋给t Console.WriteLine("t 的值为 {0}", t);//打印出结... 阅读全文

posted @ 2012-10-22 09:22 天轰穿 阅读(284) 评论(0) 推荐(0) 编辑

2012年10月19日

摘要: 小天:我跟着你的例题一路做下来,发现一个不大不小的问题,就是前面做的示例我想做完了就留下来以后做个参考。所以不能删了。但是一个例题就那么一点点代码,我又不想重新建立一个程序。于是,我就想能不能把一段一段的代码给隐藏起来,就像Windows资源管理器中那个树形菜单一样,可以展开,可以收缩。 老田:这个也太简单啦。在日常编程过程中,因为每个檔中代码太多,我们常常有将一大段代码收起来的需要。于是就需要用两个预处理指令,它们是#region和#endregion,将要展开收缩的代码就放在#region和#endregion之间,还可以在 #region后面跟描述性的文本,格式如下: #reg... 阅读全文

posted @ 2012-10-19 09:40 天轰穿 阅读(1888) 评论(0) 推荐(0) 编辑

2012年10月18日

摘要: 接着我们开始绝大部分编程语言都有切都是第一基础的知识点,就是变量。变量是计算机编程中的一个重要概念。变量是一个可以存储值的字母或名称。 当你编程时,可使用变量来存储数字,例如建筑物的高度,或者存储单词,例如人的名字,在面向对象的编程(OOP)中,可以是一个对象。简单地说,可使用变量表示程序所需的任何信息。 你可能会问:"既然我可以使用信息,为什么要用变量?" 因为变量可以随着程序的运行而改变其表示的值。例如,你可以用一个变量来记录汽车行驶的速度。因为汽车不可能总是恒定的速度行驶。于是我们再计算当前汽车消耗的时候就可以直接引用这个记录了汽车当前速度的变量。而不用修改程序去适应 阅读全文

posted @ 2012-10-18 09:34 天轰穿 阅读(287) 评论(0) 推荐(0) 编辑

2012年10月17日

摘要: 申明变量和初始化的过程比喻为修房子和入住。这个过程中共涉及到三个对象,变量名、存放变量的内存空间、值。而修房子和入住这个过程中与之对应的三个对象是,房子,地址 在C#中声明变量使用下述语法: 数据类型变量标示符;//申明的语法 变量标示符 = 值;//为变量初始化 //第二种方式 数据类型变量标示符 = 值;//申明变量的同时初始化变量 例如: string name;//申明一个名为name 的string 类型的变量 name="小天"; //初始化name变量 //第二种方式 string name1="老田"; //申明一个名为name 的str 阅读全文

posted @ 2012-10-17 09:29 天轰穿 阅读(552) 评论(0) 推荐(0) 编辑

上一页 1 2 3 4 5 6 7 ··· 14 下一页