博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

随笔分类 -  天轰穿.Net4趣味编程系列视频教程

天轰穿.Net4趣味编程系列视频教程 Visual Studio 2010 轻松学习C#
摘要:不跟你扯这没用的,我们来看个最简单的实例。透视图如图4-25 图4-25从继承的透视图中可以看到,Child类继承了Parent类,在声明了Child 对象的后,对其实例化的时候,我们将可以看到,我们可以对父类的属性X进行赋值,即如果Class Child是继承Class Parent而来,那么Child的对象中包含一个Parent的对象的属性和方法。例:采用继承的方法来计算长方形面积,设计如下图4-26: 图4-26类Parent和类Child的代码如下://---------------------类Parent------------------------public class Pa 阅读全文

posted @ 2013-01-08 13:19 天轰穿 阅读(596) 评论(0) 推荐(0) 编辑

摘要:小天:你总在说继承,继承到底是什么?老田:现实世界中的许多实体之间不是相互孤立的,他们往往具有相同的特性,也存在内在的差别。人们可以采用层次结构来描述这些实体之间的相似之处和不同之处。 图4-24 类的层次结构示意图上图反映了动物这一个大分类的派生关系。最高层的实体往往是具有最一般最普遍的特征,越下层的事物越具体,并且下层包含了上层的基特征,他们之间的关系是基类和派生类之间的关系。小天:我总结下吧,这个无非就是一般到特殊的关系。老田:是的,就如上图所表达的,动物是一个类,但是这个中只包含所有动物都具备的基本特征,比如马和鱼都是动物,都有相同的特征和操作。但是又各有特点。于是就把它们都具备的特征 阅读全文

posted @ 2013-01-07 13:35 天轰穿 阅读(374) 评论(0) 推荐(0) 编辑

摘要:小天:别总是光说不练好不好,来点实际的吧。我都习惯了从例题中学习,而不是看概念学习了。老田:哎,下面就来开发一个结构Record,来演示运算符重载,第一个重载是复写了ToString方法。using System;namespace operator_overload{ public struct Record //注意,这里是结构 { private int x, y; public Record(int num1, int num2) { x = num1; y = num2; } ///<summary> ///复写ToString方法,在界面上例题一 ///</sum 阅读全文

posted @ 2013-01-06 13:15 天轰穿 阅读(398) 评论(0) 推荐(0) 编辑

摘要:小天:来个实例说明下,到底是怎么重载的吧。老田:在讲解实例之前,我们应该先理解运算符是如何重载的,考虑一下在编译器遇到运算符时会发生什么样的情况。我们用相加运算符+作为例子来讲解。假定编译器遇到下面的代码: int myInteger = 3; uint myUnsignedInt = 2; double myDouble = 4.0; long myLong = myInteger + myUnsignedInt; double myOtherDouble = myDouble + myInteger; //会发生什么情况: long myLong = myInteger + myUnsig 阅读全文

posted @ 2013-01-05 13:24 天轰穿 阅读(354) 评论(0) 推荐(0) 编辑

摘要:接下来本节将介绍另外一个重要的重载:运算符重载。学习到现在,像+和*这样的运算符只能用于预定义的数据类型,原因很简单:编译器认为所有常见的运算符都是用于这些数据类型的,例如,它知道如何把两个long加起来,或者如何从一个double中减去另一个double,并生成合适的中间语言代码。但在定义自己的类或结构时,必须告诉编译器:什么方法可以调用,每个实例存储了什么字段等所有的信息。同样,如果要在自己的类上使用运算符,就必须告诉编译器相关的运算符在这个类中的含义。此时就要定义运算符重载。 小天:能够用通俗点的语言描述下运算符的概念不?还有只有算术运算符可以重载吗?老田:通俗的说,运算符重载就是对已有 阅读全文

posted @ 2013-01-04 13:22 天轰穿 阅读(492) 评论(0) 推荐(0) 编辑

摘要:小天:有不有什么办法,实现一次就调用多个构造函数的方法? 老田:有的,这就需要构造函数之间的互访了,换句话说,比如上例,我调用无参数的构造函数来实例化一个对象。而这个无参数的再去调用其他的构造函数,其他的再调用。就这样一环扣一环的下去。如下例 public class Product1 { public int PID; public string PName; public decimal Balance; public Product1() { this.PID = 1; this.PName = ""; this.Balance = 0.0M; } public Pr 阅读全文

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

摘要:构造函数是在实例化对象时自动调用的函数。构造函数的名字不能随便起,它们必须与所属的类同名。除了名字外,构造函数的另一个特别之处是没有返回值类型,这与返回值类型为void的函数不同。构造函数用于初始化字段的值。在你可以访问一个类的方法、属性或任何其它东西之前,第一条执行的语句是包含有相应类的构造函数。甚至你自己不写一个构造函数,也会有一个缺省构造函数提供给你。如下。 //如果类没有显示的写构造函数,那么在实例化的时候//实际上系统会给这个类分配如下这样一个由CLR提供的构造函数 class Product { public Product(): base(){ } // 由CLR提供 } 小天: 阅读全文

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

摘要:创建类库项目好吧,我们就直接从创建一个带类库项目的解决方案开始吧。打开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 天轰穿 阅读(3987) 评论(0) 推荐(0) 编辑

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

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

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

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

摘要:用于获取 值类型 的字节大小。例如,可以如下所示检索 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 天轰穿 阅读(298) 评论(0) 推荐(0) 编辑

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

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

摘要:直到现在,我们一直在使用简单的=赋值运算符,其实还有其它赋值运算符,而且它们都非常有用。除了=运算符外,其它赋值运算符都以类似的方式工作。 与=一样,它们都是根据运算符和右边的操作数,把一个值赋给左边的变量。下表列出了这些运算符及其说明。 运算符 类 别 示例表达式 结 果 =二元 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 天轰穿 阅读(232) 评论(0) 推荐(0) 编辑

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

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

摘要:考虑下述情形:要根据变量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 天轰穿 阅读(1773) 评论(0) 推荐(0) 编辑

摘要:由于本章是属于本书的最最最基础部分,所以我们在讲述知识的同时也很注重学习方法和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 天轰穿 阅读(606) 评论(1) 推荐(0) 编辑

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

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

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

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

摘要:有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 天轰穿 阅读(923) 评论(0) 推荐(0) 编辑

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

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