2012年6月27日

C#索引器-示例代码

摘要: using System;public class Photo //这个类是一个相片类{private string _title; //相片标题//先定义默认构造函数public Photo(){ //初始化相片标题的构造方法 _title = "我是张三";}public Photo(string title){ //初始化相片标题的构造方法 _title = title;}public string Title{ //属性 get { return _title; }}}public class Album{//相册类Photo[]photos; //用于存放照片的数 阅读全文

posted @ 2012-06-27 09:49 流星落 阅读(260) 评论(0) 推荐(0)

C#索引器-索引器和属性的区别

摘要: 属性和索引器的差别:一个对象只有一个属性值,所以要存放多个值必须实例化多个对象(通常情况下,实例化一个数组的对象,接着实例化的对象赋给这个数组)。一个对象对应的索引是一个数组,并且可以存放多个数值或字符串,所以只需要实例化一个对象就可以存放以及访问多个存储内容。using System;using System.Collections.Generic;namespace aaa{public class arrClass{ //通过构造方法以及属性进行赋值 private string name;//定义一个字段 public string Name{ //定义一个属性,通过属性来修改name 阅读全文

posted @ 2012-06-27 09:48 流星落 阅读(290) 评论(0) 推荐(0)

C#索引器-索引器与数组属性的比较

摘要: 索引器(Indexer)索引器允许类或结构的实例按照与数据相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。所以索引器也被称为有参属性。示例一:using System ;class ArrClass//没有索引器的类{private readonly string name;public ArrClass(string name){this.name = name;}public string Name{get{return name;}}}class IndexClass//带索引器的类{private string [] name = new string [10] 阅读全文

posted @ 2012-06-27 09:47 流星落 阅读(1165) 评论(0) 推荐(0)

C#索引器-索引器概述

摘要: 数组中的元素可以通过索引进行检索,如果一个类中有很多对象,怎样简单、快速地查找到需要的对象以及对象的特性呢?索引器就是为了实现这样的功能而设计的。索引器允许类或结构的实例按照与数组相同的方式进行索引。可以简单地把索引器理解为书中的目录,字典中提供的检索的索引。索引器(Indexer)是C#引入的一个新型的类成员,它使得对象可以像数组那样被方便,直观的引用。索引器非常类似于我们前面讲到的属性,但索引器可以有参数列表,且只能作用在实例对象上,而不能在类上直接作用。索引器可以重载,以数组的形式访问类中的成员,实际上不单单是访问,可以在访问的代码中实现特定的处理。 阅读全文

posted @ 2012-06-27 09:46 流星落 阅读(210) 评论(0) 推荐(0)

C#索引器-索引器的定义

摘要: 索引器定义类似于属性,但其功能与属性并不相同。索引器提供一种特殊的方法编写get和set访问器。属性可以像访问字段一样访问对象的数据,索引器可以使用户像访问数组一样访问类成员。定义索引器的语法如下:<访问修饰符> 类型名称 this [类型名称 参数名]{ get{//获得属性的代码} set{ //设置属性的代码}}索引器没有像属性和方法那样的名字,关键字this清楚地表达了索引器引用对象的特征。和属性一样,value关键字在set后的语句块里有参数传递意义。和方法一样,索引器有5种存取保护级别new、public、protected、internal、private,和4种继承 阅读全文

posted @ 2012-06-27 09:46 流星落 阅读(1391) 评论(0) 推荐(0)

C#接口-显式接口和隐式接口的实现

摘要: C#中对于接口的实现方式有隐式接口和显式接口两种:隐式地实现接口成员创建一个接口,IChinese,包含一个成员 Speak;我们创建一个类Speaker,实现接口Chinese//隐藏式实现例子public interface IChinese{ string Speak();}public class Speaker : IChinese{ public string Speak() { return "中文"; }}这个就是隐式实现接口。隐式实现调用方法如下:IChinese s = new Speaker();s.Speak();Speaker s = new Sp 阅读全文

posted @ 2012-06-27 09:45 流星落 阅读(318) 评论(0) 推荐(0)

C#接口、类和抽象类

摘要: 一个类可以同时继承类和接口,或者抽象类和接口,抽象类和类不能在一个类的继承列表中同时出现。如果子类同时继承类,抽象类和接口,一定要把类或者抽象类写在前面,接口写在后面,类名和接口名之是用“,”隔开,接口没有先后顺序。每一种继承要根据各自的规则去实现。如果希望学生都具有姓名、性别、年龄和学号等属性,当可以直接在计算机专业的学生类中创建,但是,如果还有别的专业的学生,那么都要重新写一遍,不符合代码重用的原则。现在把公用代码提取出来创建一个父类,在父类中赋予这些属性就可以。由于学号只有学生才有,把学号属性放在学生接口中定义更合理,更有利于扩展。using System;public class Pe 阅读全文

posted @ 2012-06-27 09:44 流星落 阅读(249) 评论(0) 推荐(0)

C#类、接口、虚方法和抽象方法-抽象类与接口的区别与联系

摘要: C#抽象类和接口之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于抽象类和接口的选择显得比较随意。其实,两者之间还是有很大的区别的。首先,以抽象类的方式定义一个公共的抽象类Animal如下:public abstract class Animal { public abstract void Run(); public abstract void Eat(); } 注意:类中默认的范围是private, 一定要显式将抽象的内容显示声明为public然后使用接口的方式定义接口Animal如下:public interface IAnimal{ 阅读全文

posted @ 2012-06-27 09:43 流星落 阅读(313) 评论(0) 推荐(0)

C#类、接口、虚方法和抽象方法-抽象类和接口的相同点和区别

摘要: 一、抽象类 (1) 抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法 (2) 抽象类不能被实例化 (3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类 (4) 具体派生类必须覆盖基类的抽象方法 (5) 抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。如果不覆盖,则其具体派生类必须覆盖它们。如:using System;public abstract class A //抽象类A { private int num=0; public int Num //抽象类包含属性 { get { return num; } set ... 阅读全文

posted @ 2012-06-27 09:42 流星落 阅读(380) 评论(0) 推荐(0)

C#类、接口、虚方法和抽象方法-接口与抽象类的区别实例

摘要: 1.抽象类可以有实现(包括构造函数),而接口不可以有任何实现。namespace ConsoleApplication1 { class Program { interface IMyInterface1 { void IMethod1(); void IMethod2(); } abstract class AMyClass1 { public abstract void AMethod1(); public abstract void AMethod2(); public AMyClass1() { } public void AMethod() { Co... 阅读全文

posted @ 2012-06-27 09:41 流星落 阅读(204) 评论(0) 推荐(0)

C#类、接口、虚方法和抽象方法-抽象类和接口的区别

摘要: 一、抽象类: 抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。二、接口: 接口是引用类型的,类似于类,和抽象类的相似之处有三点: 1、不能实例化; 2、包含未实现的方法声明; 3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员); 另外,接口有如下特性:接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成 阅读全文

posted @ 2012-06-27 09:40 流星落 阅读(505) 评论(0) 推荐(0)

C#类、接口、虚方法和抽象方法-非抽象类与接口的差别

摘要: 非抽象类和接口的差别很大,它们的差别主要表现在以下几个方面:1、非抽象类可以有成员变量、常量和构造函数,而接口中不能存在常量、域、操作符、构造函数或析构函数,而且不能包含任何静态成员。2、一个非抽象类可以继承多个接口,而只能继承一个类;3、非抽象类中可以定义具体的方法和实现,而接口只定义方法没有具体的实现;4、接口成员一定是公共的,而且不能声明为虚拟或者是静态的,而非抽象类中是没有这些限制。5、非抽象类可以被实例化,而接口不可以。一般来说,非抽象类的内容较接口要丰富得多,非抽象类可以有面向对象所有的绝大部分组成元素。但是接口相对于非抽象类来说更加灵活,两者在使用上冲突不大,在使用的时候视具体情 阅读全文

posted @ 2012-06-27 09:39 流星落 阅读(289) 评论(0) 推荐(0)

C#类、接口、虚方法和抽象方法-虚拟方法与抽象方法之区别

摘要: 虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢?1. 虚方法必须有实现部分,并为派生类提供了重写该方法的选项。抽象方法没有提供实现部分,抽象方法是一种强制派生类重写的方法,否则派生类将不能被实例化。//抽象方法publicabstractclass Animal{publicabstractvoid Sleep();publicabstractvoid Eat();}//虚方法publicclass Animal{publicvirtualvoid Sleep(){}publicvirtualvoid Eat(){}}2. 抽象方法只能在抽象类中声明, 抽象方法必须在派生类中重写。虚 阅读全文

posted @ 2012-06-27 09:38 流星落 阅读(631) 评论(0) 推荐(0)

C#接口-接口的继承

摘要: 类之间可以继承,和类一样,接口也允许继承。C#中接口可以多继承,接口之间可以互相继承和多继承。普通类和抽象类可以继承接口。一个类可以同时继承一个类和多个接口,但是接口不能继承类。假如你是一名在职学习的学生,你就具有双重身份。一个身份是学生,必须完成学习任务,另一身份是职员,必须完成工作任务。进一步说,如果你是计算机类学生,除学基础课外,还必须学习C#程序设计。现在建立一个模型,应该如何建立?我们首先来定义一个学生接口,规定学生必须学习,再建立一个职员接口,规定职员必须完成工作任务。计算机专业的学生,除了完成一般学习任务,还是学习C#。可以再定义一个接口,继承学生接口,规定自己的学习任务。usi 阅读全文

posted @ 2012-06-27 09:37 流星落 阅读(7590) 评论(0) 推荐(0)

C#接口-深入浅出(这篇写得很好)

摘要: 假设我们公司有两种程序员:VB程序员指的是用VB写程序的程序员,用VBpro这个类表示;C程序员指的是用C写程序的程序员,用Cpro这个类来表示。每个类都有一个WriteCode()方法。现在公司来了一个项目,要求派某个程序员写一个程序。using System;//vb程序员class VBpro{public void WriteCode(){ Console.WriteLine("我用vb写代码");}}//c程序员class Cpro{public void WriteCode(){ Console.WriteLine("我用c写代码");}}/ 阅读全文

posted @ 2012-06-27 09:36 流星落 阅读(791) 评论(0) 推荐(0)

C#接口-接口作为参数

摘要: 接口作为参数和返回值,都是同样的作用,所有继承了这个接口的类,都可以使用。也就是说,你给这个方法传参数的时候,可以把继承了这个接口的类的实例传给这个方法,同样的道理,你可以把继承了这个接口的类返回。接口做为参数传递,传递的是实现了接口的对象; 接口作为类型返回,返回的是实现了接口的对象。接口的传递与返回就是围绕着上面的两句话展开的。using System;// 一个人类的接口public interface IPerson{void Say();}// 一个男人的类public class Man: IPerson{public void Say(){ Console.WriteLine(& 阅读全文

posted @ 2012-06-27 09:35 流星落 阅读(1813) 评论(0) 推荐(0)

C#接口-接口作为返回值

摘要: 接口做为参数传递,传递的是实现了接口的对象; 接口作为类型返回,返回的是实现了接口的对象。using System;// IShape接口public interface IShape{// Area属性int Area{ get; set;}// Caculate计算方法void Caculate();}// Circle类继承IShapepublic class Circle: IShape{// area字段int area = 0;// 构造函数public Circle(int m_Area){ area = m_Area;}// Area属性public int Area{ get 阅读全文

posted @ 2012-06-27 09:35 流星落 阅读(1689) 评论(0) 推荐(0)

C#接口-经典实例

摘要: 接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合。一旦定义了接口,就可以在类中实现它。这样,类就可以支持接口所指定的所有属性和成员。接口不能单独存在;不能进行实例化(因为没有必要实例化);接口不包括任何实现其成员的代码而只定义了成员本身;成员的实现将在实现接口的类中实现。以上是接口的书本定义,读完基本不知所云。就知道了接口与类不一样,接口与类都需要定义自身的成员,但接口不能实现成员的功能。我觉得可以简单地说:接口是类的更高级抽象(类已经是其所要实现的过程的抽象了),接口定义了类实现的规范。接口好像是事先定义好的备忘录,提醒你,类需要有这些成员,需要完成这些功能。但是,不同的类,他们 阅读全文

posted @ 2012-06-27 09:32 流星落 阅读(1244) 评论(0) 推荐(0)

C#接口-对接口理解实例代码

摘要: using System;public interface Iren{void eat();void sleep();}public class Xuesheng: Iren{public void eat(){ Console.WriteLine("我是一个学生,我去食堂吃饭");}public void sleep(){ Console.WriteLine("我是一个学生,我回寝室睡觉");}}public class Laoshi: Iren{public void eat(){ Console.WriteLine("我是一个老师,我回家 阅读全文

posted @ 2012-06-27 09:31 流星落 阅读(279) 评论(0) 推荐(0)

C#接口-对接口的理解

摘要: 我是通过此文章理解了接口,觉得非常实用,借来一用。c#为什么要使用接口?通俗的讲,就是为了降低耦合度。给大家看一个我见过的很搞笑的例子。看看下面的程序:一个学校里边,有两种人:学生、老师。他们都要吃饭和睡觉。1publicinterface I人 2{3void 吃饭();4void 睡觉();5}6publicclass 学生:I人 7{8publicvoid 吃饭() 9{ //去食堂吃饭 } 10publicvoid 睡觉() 11{ //回寝室睡觉 } 12//其他特有方法,比如泡妞、打游戏 13}14publicclass 老师:I人 15{ 16publicvoid 吃饭() 17 阅读全文

posted @ 2012-06-27 09:30 流星落 阅读(425) 评论(0) 推荐(0)

C#接口-接口的实现

摘要: C#定义了接口后,就要在子类中实现。C#中通常把子类和父类的关系称为继承,子类和接口的关系称为实现。子类可以继承一个父类,可以实现多个接口。接口中不能定义构造函数,所以接口不能实例化。下面我们看例子:using System;public interface IChoose{void On();void Off();}public class TV: IChoose{private string _tvname = "长虹";public void On(){ Console.WriteLine("{0}电视打开了", this._tvname);}pu 阅读全文

posted @ 2012-06-27 09:29 流星落 阅读(460) 评论(0) 推荐(0)

C#接口-接口作用浅谈

摘要: 继承“基类”和实现“接口”都能实现某些相同的功能,但有些接口能够完成的功能是只用基类无法实现的。1、接口用于描述一组类的公共方法和公共属性, 它不实现任何的方法或属性,只是告诉继承它的类至少要实现哪些功能,继承它的类可以增加自己的方法。2、使用接口可以使继承它的类: 命名统一规范,易于维护。比如: 两个类 “狗”和“猫”,如果它们都继承了接口“动物”,其中动物里面有个方法Behavior(),那么狗和猫必须得实现Behavior()方法, 并且都命名为Behavior。如果命名不是Behavior(),编译不会通过。3、提供永远的接口。当类增加时,现有接口方法能够满足继承类中的大多数方法,没必 阅读全文

posted @ 2012-06-27 09:29 流星落 阅读(358) 评论(0) 推荐(0)

C#接口-接口作用

摘要: C#接口是一个让很多初学C#者容易迷糊的东西,用起来好像很简单,定义接口,里面包含方法,但没有方法具体实现的代码,然后在继承该接口的类里面要实现接口的所有方法的代码,但没有真正认识到接口的作用的时候就觉得用接口是多此一举,当然你这样想那是绝对绝对错误的,比尔盖茨的微软请的员工都是比尔盖茨还聪明的人,他们的C#能添这样的多此一举吗?可简单的这样理解接口:接口是方法的抽象,如果不同的类有同样的方法,那么就应该考虑使用接口。 例如,人和车都有“跑”的方法,那么就可以定义一个接口IRun //注意,定义接口时,里面的方法不能有方法体 //应该在类里再去实现 //而具接口的成员全是公有的,不应有修饰符 阅读全文

posted @ 2012-06-27 09:28 流星落 阅读(297) 评论(0) 推荐(0)

C#接口-接口概述

摘要: C#不支持多重继承,但是客观世界出现多重继承的情况又比较多。为了避免传统的多重继承给程序带来的复杂性等问题,C# 提出了接口的概念。通过接口可以实现多重继承的功能。接口是单纯对事物行为的描述。例如,电器都有“开”和“关”两个行为,开关的作用在于打开或关闭电器,而开关的形式也是不一样的。电灯、电视、电扇,电冰箱各自完成的开关的动作也是不一样的,但是所有的电器都必须具有开和关的功能,这是一个规定,在程序设计中,这个规定就是接口。C#中接口的作用的什么?不是可以继承吗?为什么还要用借口?抽象类或实体类,只能单一继承,接口可以多继承。子类只能有一个基类,但子类可以实现几乎无数个接口。接口只包含行为定义 阅读全文

posted @ 2012-06-27 09:27 流星落 阅读(285) 评论(0) 推荐(0)

C#接口-接口定义

摘要: 接口用来描述一种程序的规定,接口描述可属于任何类或结构的一组相关行为。实现接口的类或结构要与接口的定义严格一致。接口可由方法、属性、事件、索引器或这4种成员类型的任何组合构成。接口不能包含字段。接口成员一定是公共的。定义接口的语法如下:<访问修饰符> interface 接口名{//接口主体}下面定义一个开关的接口,代码如下:public interface IChoose{void On();void Off();}定义接口时要遵循的编码标准如下:1、接口名称必须使用大写字母“I”开头,如Icompute,IChoose。定义接口时必须注意以下内容:2、接口的访问修饰符可以选择使 阅读全文

posted @ 2012-06-27 09:27 流星落 阅读(781) 评论(0) 推荐(0)

C#多态性-抽象类对象引用子类实例

摘要: C#规定,抽象类不能实例化,如下代码会发生编译错误:Animal myanimal=new Animal();那么如下代码正确吗?Animal myanimal=new Dog();myanimal.Cry();这段代码是完全正确的。既然抽象类不能实例化,那么这段代码为什么又可以运行呢?首先要明确上面的代码并没有实例化抽象类,只是声明了一个抽象类的对象myanimal,实例化时必须通过构造函数来实现,这里调用的是子类的构造函数,所以实例化的是子类对象,只是抽象类对象引用了子类实例。那么这个对象是子类还是父类呢?using System;public abstract class Animal{ 阅读全文

posted @ 2012-06-27 09:26 流星落 阅读(1433) 评论(0) 推荐(0)

C#多态性-抽象类和抽象方法的使用

摘要: 定义抽象类和抽象方法的目的就是为子类提供一种规定,约束子类的行为。C#通过方法重写来实现抽象方法。当一个抽象基类派生一个子类时,子类将继承基类的所有特征,重新实现所有抽象方法。在子类中实现基类的抽象方法,是使用override关键字来重写基类方法。语法如下:访问修饰符 override 返回类型 方法(){//方法体}重写抽象方法和重写虚拟方法是一样的。不同的是在基类一种是虚拟方法,另一种是抽象方法。通过override关键字可以在子类中重写方法,这样每种动物的叫声不相同了。抽象类和抽象方法的作用:using System;public abstract class Animal{public 阅读全文

posted @ 2012-06-27 09:25 流星落 阅读(337) 评论(0) 推荐(0)

C#多态性-抽象类和抽象方法概述

摘要: 如果继承是面向对象设计理论的基石,那么抽象理论和方法就是继承理论的顶梁柱。在汉语词典中抽象是这样解释的:将几个有区别的物体的共同特性或形象抽取出来或孤立地进行考虑的行动或过程。可以看出,抽象就是从事物中提取特征和性质,并不是事物本身。具体应该如何理解呢?大家都知道,学生有一个共同的特征是必须学习,那么学什么,如何学,每一个学生就不一样了。这样可以提取学习这个动作为抽象方法,而不考虑具体内容。动物类都有叫的动作,具体动物如何叫,暂不考虑,先把共性提取出来。简单地说,用来描述这些共性的类就是抽象类,抽象类中不考虑具体实现,只确定必须具有的行为,就是抽象方法。抽象方法是一个没有实现的方法,使用关键字 阅读全文

posted @ 2012-06-27 09:24 流星落 阅读(263) 评论(0) 推荐(0)

C#多态性-抽象类的特点

摘要: 1、声明一个抽象方法使用abstract关键字。2、一个类中可以包含一个或多个抽象方法。3、抽象类中可以存在非抽象的方法。4、抽象类不能被直接被实例化。5、实现抽象类用“:”(冒号),实现抽象方法用override关键字。6、抽象类可以被抽象类所继承,结果仍是抽象类。7、抽象方法被实现后,不能更改修饰符。 using System; public abstract class Person { public abstract void SayHello(); public void about() { Console.WriteLine("Abstract D... 阅读全文

posted @ 2012-06-27 09:24 流星落 阅读(317) 评论(0) 推荐(0)

C#多态性-利用虚拟方法来实现多态

摘要: 我们看一个例子,假若有一个动物类,类中用方法cry()描述动物的叫声,不同的动物的叫声是不一样的。根据继承的特征,把类中公共部分的内容放在父类中,那么cry()方法就应该放在父类中,根据这样的思路编写程序如下:using System;class Anmial{public void Cry(){Console.WriteLine("这是动物的叫声");}}class Dog: Anmial{public void Run(){ Console.WriteLine("狗路得快");}}class Cat: Anmial{public void Look( 阅读全文

posted @ 2012-06-27 09:23 流星落 阅读(338) 评论(0) 推荐(0)

C#重载和重写的区别

摘要: 重载就是在同一个类中,方法名相同,参数列表不同。参数列表不同包括:参数的个数不同,参数类型不同等。重载特征: I.方法名必须相同 II.参数列表必须不相同,与参数列表的顺序无关 III.返回值类型可以不相同用于在给定了参数列表和一组候选函数成员的情况下,选择一个最佳函数成员来实施调用。 public void test(int x,int y){} public void test(int x,ref int y){} public void test(int x,int y,string a){}重写就是子类重写父类的方法,在调用的时候,子类的方法会覆盖父类的方法,也就是会调用子类的方法。在 阅读全文

posted @ 2012-06-27 09:22 流星落 阅读(302) 评论(0) 推荐(0)

C#多态性-什么是多态

摘要: 下面举一个生活的例子来理解多态。如果要求3种人——孩子,运动员,音乐演奏者都执行一个动作“play”,会发生什么情况呢?孩子会出去玩耍。运动员会比赛。演员开始演奏。对于同一个命令,不同的人会有不同的反应,执行不同的动作,这就是生活中一个多态。在程序设计中,对于同一个方法,由于执行的对象不同,方法的内容也就不同。执行的结果也是不相同的。同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。多态性通过派生类覆写基类中的虚函数型方法来实现。多态性分为两种,一种是编译时的多态性,一种是运行时的多态性。编译时的多态性:编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编 阅读全文

posted @ 2012-06-27 09:21 流星落 阅读(970) 评论(0) 推荐(0)

C#怎么理解“父类引用指向子类对象”

摘要: 父类代码如下:public class Person{//父类的构造函数public Person(){Console.WriteLine("Person");}//父类的虚方法public virtual void virFun(){Console.WriteLine("Person's Fun");}}子类代码如下:public class Son1:Person//继承{//子类Son1的构造方法public Son1(){Console.WriteLine("Son1");}//重写父类的虚方法public overr 阅读全文

posted @ 2012-06-27 09:20 流星落 阅读(711) 评论(0) 推荐(0)

父类对象引用子类实例-父母代表孩子做事

摘要: 子类继承父类的属性和方法,使创建子类变得很简单,实现了代码重用。继承还有一个重要的特性,父类对象可以引用子类实例。也就是子类实例可以赋值给父类的对象变量。这个特性可以这样理解:儿子继承父亲,儿子又把管理自己事务的权利交给父亲,那么父亲就可以代表儿子处理事务,这就是父类对象引用子类实例。现在生活中,父母可以代表儿子处理事务,总公司可以代表子公司生命权利。父类指针要访问子类的成员的情况下,要强制类型转换。父类的对象变量=new 子类类型;((子类类型)父类引用).子类变量using System;class Father{private int _wealth = 5000;public void 阅读全文

posted @ 2012-06-27 09:19 流星落 阅读(1195) 评论(0) 推荐(0)

C#中调用父类的构造方法和成员

摘要: C#中使用的关键字是base,但用法不完全相同。1. 调用父类的构造方法// 父类 public class Father { public Father(String name) { this.name = name; } private String name; } // 子类 public class Son:Father { public Son(String name) : base(name) { } }注意:如果没有第14行“:base(name)”,编译器将报告错误:“Father”不包含采用“0”参数的构造函数。因为默认隐式调用父类不带参数的构造方法,而Fat... 阅读全文

posted @ 2012-06-27 09:18 流星落 阅读(4537) 评论(0) 推荐(0)

C#中base关键字-调用父类成员

摘要: C#中base关键字在继承中起到非常重要的作用。它与this关键字相比,this关键字代表当前实例。base关键字代表父类,使用base关键字可以调用父类的构造函数、属性和方法。使用base关键字调用父类构造函数的语法如下:子类构造函数:base(参数列表)使用base关键字调用父类方法的语法如下:base.父类方法();using System ;class Teacher//老师类{public Teacher()//构造函数1 { Console.WriteLine ("我是一位教师。"); }public Teacher(string str)//构造函数2 { C 阅读全文

posted @ 2012-06-27 09:17 流星落 阅读(3687) 评论(0) 推荐(0)

C#中this关键字-调用本类成员

摘要: 关键字this有两种基本的用法,一是用来进行this访问,二是在声明构造函数时指定需要先执行的构造函数。一、this访问在类的实例构造函数和实例函数成员中,关键字this表示当前的类实例或者对象的引用。this不能用在静态构造函数和静态函数成员中,也不能在其他地方使用。当在实例构造函数或方法内使用了与字段名相同的变量名或参数名时,可以使用this来区别字段和变量或者参数。下面的代码演示了this的用法。public class Dog{ public string name; public int age; public Dog() { } public Dog(string name) // 阅读全文

posted @ 2012-06-27 09:17 流星落 阅读(2536) 评论(0) 推荐(0)

C#设置访问权限

摘要: 在C#中有一个规定:编译器不允许派生类的可访问性比其基类更高。也就是说,内部类可以继承于一个公共类,但公共类不能继承于一个内部类。1、public 关键字是类型和类型成员的访问修饰符。公共访问是允许的最高访问级别。对于访问公共成员没有限制。有关 public 与其他访问修饰符的比较,请参见可访问性级别。示例在下例中,声明了两个类:MyClass1 和 MyClass2。直接从 MyClass2 访问 MyClass1 的公共成员 x 和 y。// protected_public.cs// Public accessusing System;class MyClass1 { public in 阅读全文

posted @ 2012-06-27 09:16 流星落 阅读(781) 评论(1) 推荐(0)

默认构造函数的作用(“A”方法没有采用“0”个参数的重载

摘要: 构造函数主要用来初始化对象。它又分为静态(static)和实例(instance)构造函数两种类别。大家应该都了解如何来写类的构造函数,这里只说下默认构造函数的作用,以及在类中保留默认构造函数的重要性。实际上,我说错了。正确的说法是:以及在类中保留空参数构造函数的重要性。我们来写一个类A,代码如下:public class A{ public int Number; //数字 public string Word; //文本}//在Test类中实例化public class Test{ static void Main(){ A a = new A(); //实例化,A()即为类A的默认构造函 阅读全文

posted @ 2012-06-27 09:15 流星落 阅读(565) 评论(0) 推荐(0)

C#继承中访问修饰符的区别

摘要: 继承中访问修饰符的区别一、public 类内部可以,子类可以,其他类可以。二、private 类内部可以,子类和其他类都不可以。三、protected 类内部和子类可以,其他类不可以。四、internal 类声明为内部的,即只有当前工程中的代码才能访问它。父类中的成员如果用public修饰,任何类都可以访问;如果用private修饰,它将作为私有成员,只有类本身可以访问,其他任何类都无法访问。在C#中,使用protected修饰符的成员可以被其子类访问,而不允许其他非子类访问。父类中只有被“public”,“protected”,“internal”修饰的成员才可以被继承。这些成员包括父类的字 阅读全文

posted @ 2012-06-27 09:15 流星落 阅读(833) 评论(0) 推荐(0)

C#中构造函数不是不能被继承吗?为什么以下的构造函数先执行?

摘要: using System;public class ParentClass{public ParentClass(){ Console.WriteLine("父类构造函数。");}public void print(){ Console.WriteLine("I'm a Parent Class。");}}public class ChildClass: ParentClass{public ChildClass(){ Console.WriteLine("子类构造函数。");}public void print(string 阅读全文

posted @ 2012-06-27 09:14 流星落 阅读(840) 评论(0) 推荐(1)

C#继承与构造函数的调用

摘要: 1、实例化父类时,可以使用new子类,执行构造函数顺序为:先执行父类构造函数,再执行子类构造函数。2、实例化子类时,只可以new子类,执行顺序同上。3、父类实例化后,只能执行父类的方法,获得父类的属性等。4、实例化子类后,可同时执行子类和父类的方法和属性,如同名方法,则执行子类的方法。我们看以下的代码: public class A { public A(string a) { } } public class B:A { public B() { } }这段代码编译后,会有个错误提示:A does not contain a constructor that takes '0' 阅读全文

posted @ 2012-06-27 09:12 流星落 阅读(4656) 评论(0) 推荐(1)

C#继承的特性

摘要: C#继承的特性面向对象的程序设计技术引入了继承的概念。一个类从另一个类派生出来时,派生类从基类那里继承特性。C#中,派生类从它的直接基类中继承成员:方法、域、属性、事件、索引指示器。除了构造函数和析构函数,派生类隐式地继承了直接基类的所有成员。一、继承的传递性派生类从基类那里继承特性。派生类也可以作为其它类的基类。从一个基类派生出来的多层类形成了类的层次结构。就像现在中爷爷,爸爸和儿子的关系。儿子不仅可以访问父类爸爸的所有公有属性方法,也可以访问爷爷的所有公有属性和方法,这种关系称为继承传递性。二、继承的单一性继承的单一性是指子类只能继承一个父类,不能同时继承多个父类。C#中,派生类只能从一个 阅读全文

posted @ 2012-06-27 09:05 流星落 阅读(3080) 评论(0) 推荐(0)

C#构造函数在继承过程中的执行顺序

摘要: using System;class Program { static void Main(string[] args) { childTest test = new childTest(); childTest test1 = new childTest(2); childTest test2 = new childTest(2, 3); Console.Read(); } } class baseTest { public baseTest() { Console.WriteLine("父类构造函数"); } public baseTest(int i) { Conso 阅读全文

posted @ 2012-06-27 09:04 流星落 阅读(694) 评论(0) 推荐(0)

C#继承使用实例

摘要: 继承是面向对象编程最重要的特性之一。任何类都可以从另外一个类继承,这就是说,这个类拥有它继承的类的所有成员。在面向对象编程中,被继承的类称为父类或基类。在C#中提供了类的继承机制,但只支持单继承,而不支持多重继承,即在C#中一次只允许继承一个类,不能同时继承多个类。说明:继承类时,需要使用冒号加类名。创建派生类的语法如下:<访问修饰符> class 派生类名:基类名{//类代码块}下面通过实例来介绍类的继承性在实际中的应用using System;public class Class1 { public void outMethod() { Console.WriteLine(&q 阅读全文

posted @ 2012-06-27 09:03 流星落 阅读(655) 评论(0) 推荐(0)

C#类的继承-什么是继承

摘要: 为了能够合理描述自然界的规律,面向对象的编程引入了继承的概念,它是面向对象编程中最重要的概念之一,定义了如何根据现有类创建新类的过程。任何类都可以从另外一个类继承,遵循的原则是:一个类派生出来的子类具有这个类所有的公共属性和方法。C#提供了类的继承机制,创建新类所根据的基础类称为基类或父类,新建的类称为派生类或子类。继承是实现代码重用的重要机制。使用继承可以不需要从头开始创建新类,可以在现有的基础上添加新的方法和属性,节约时间和精力,大大提高效率。同类事物具有共同性,在同类事物中,每个事物又具有其特殊性。运用抽象的原则舍弃对象的特殊性,抽取其共同性,则得到一个适应于一批对象的类,这便是基类(父 阅读全文

posted @ 2012-06-27 09:02 流星落 阅读(1413) 评论(0) 推荐(0)

C#对象初始化器

摘要: 在C# 3.0中增加了一个名为"对象初始化器"(object initializer)的特性 ,它能初始化一个对象中的所有允许访问的字段和属性。具体地说,在创建对象的构造器调用之后,你现在可以增加一对大括号,并在其中添加一个成员初始化列表。每个成员的初始化操作都是一个赋值操作,等号左边是一个允许访问的字段属性,右边则是具体要赋的值。创建一个Student对象,通过其属性初始化对象,通常都这样实现。Student str=new Student();stu.Name="张三";stu.Sex="男";stu.Age="25&q 阅读全文

posted @ 2012-06-27 09:01 流星落 阅读(448) 评论(0) 推荐(0)

C#自动属性及属性的简写形式

摘要: 属性是一个非常有用的技术,以C#应用广泛。我们采用手动输入费时费力。vs2008提供了一种快速创建属性的方式,重构/封装字段。首先在一个类中定义一个私有字段,选择这个字段,右击此字段,在弹出的快捷菜单中选择“重构”——“封装字段”命令。在单击“封装字段”后,在“属性名”文本框中可以修改属性名称,默认是将字段名首字母大写,一般不需要修改,然后单击“确定”按钮。using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Example_TestPro{ class Stude 阅读全文

posted @ 2012-06-27 09:00 流星落 阅读(702) 评论(0) 推荐(0)

C#使用属性

摘要: 我们通常把字段定义为私有的,属性定义为公共的,通过属性访问字段。定义一个属性时,类型必须和它所访问的字段一致。例如:姓名_name为string类型,那么它对应的属性Name也一定是string类型。注意:属性不是必须和字段相关联的,但是没有字段单独定义属性没有任何意义。属性定义时属性名后边没有小括号,set{}和get{}访问器也都是大括号,不是小括号。属性本质上是方法,只是与方法不同。可以实例化对象后给属性赋值,也可以取值,只调用属性即可。不需要访问其中的访问器。using System;class User{//设为私有的private string name;private strin 阅读全文

posted @ 2012-06-27 08:58 流星落 阅读(245) 评论(0) 推荐(0)

C#定义属性-静态属性

摘要: C#静态属性可以是读写属性,只读属性,只写属性中的任意一种。也就是说,静态属性可以同时包含set访问器和get访问器,也可以只包含其中一种。静态属性定义方式就是在属性前加static关键字,语法如下:<访问修饰符> static 数据类型 属性名{get{}set{}}静态访问器适用于整个类,而不是类的实例。静态属性中的set{},get{}访问器只能访问类的静态成员。静态属性可以通过类名访问,不能使用实例调用,这与静态方法相同。 阅读全文

posted @ 2012-06-27 08:57 流星落 阅读(1330) 评论(0) 推荐(0)

C#定义属性-只写属性

摘要: 只有set访问器的属性为只写属性,此属性不定义get访问器。语法如下:<访问修饰符> 数据类型 属性名{set{}}定义了只写属性,就只能通过该属性赋值,而不能取值。private int _sex;public int Sex{set{ _sex=value;} 阅读全文

posted @ 2012-06-27 08:55 流星落 阅读(999) 评论(0) 推荐(0)

导航