这里我们接着上一篇博客,继续学习用C#实现面向对象中的概念。这里学习下边几个,当然我们还是通过动物比赛的例子。
多态:表示不同的对象可以执行相同的动作,但是通过它们自己的实现代码来执行。这里需要将父类将该成员声明为虚拟的,而且用到了方法重写(override).
抽象类:用abstract声明抽象类,注意抽象类不能实例化,抽象方法必须被子类重写。
接口:是把隐式公共方法和属性组合起来,以封装特定的功能的一个集合,一旦类实现了接口,就可以支持接口所指定的所有属性好成员。一个类可以支持多个接口,多个类也可以支持相同的接口。
集合:是优于数组,.NET Framework提供了用于数据存储和检索的专用类。集合随着我们向里边添加元素而自动增加,自动调节大小。提供了对堆栈,队列和哈希表的支持。
泛型:具有占位符(即参数类型)的类,结构,接口和方法。和集合紧密联系,泛型集合可以获得类型安全的直接优点。也就是说类型固定了。
下边我们通过这个例子来理解上边的概念:
定义类和接口的代码:
abstract class Animal//利用关键字abstract定义了一个抽象类
{
protected string name = "";
public Animal(string name)
{
this.name = name;
}
public Animal()
{
this.name = "无名";
}
protected int shoutNum = 6;//叫声的次数
public int ShoutNum
{
get
{
return shoutNum;
}
set
{
shoutNum = value;
}
}
public string shout()//叫声发出的代码
{
string result = "";
for (int i = 0; i < shoutNum; i++)
result += getshoutsound() + ", ";//调用了getshoutsound的虚方法
return "我的名字叫"+ name + ""+result ;
}
protected virtual string getshoutsound()//修饰符virtual表示此方法为虚方法,可以被子类重写
{
return "";
}
}
//定义不同的子类,来实现父类,其实就是多态的很好体现
class Cat:Animal //子类猫
{
public Cat():base()
{}
public Cat (string name):base (name)
{}
protected override string getshoutsound()
{
return"喵";
}
}
class Dog : Animal//子类狗
{
public Dog()
: base()
{ }
public Dog(string name)
: base(name)
{ }
protected override string getshoutsound()
{
return "喵";
}
}
class Cattle : Animal//子类牛
{
public Cattle()
: base()
{ }
public Cattle(string name)
: base(name)
{ }
protected override string getshoutsound()
{
return "哞";
}
}
class sheep:Animal//子类羊
{
public sheep ():base()
{}
public sheep(string name)
: base(name)
{ }
protected override string getshoutsound()
{
return "咩";
}
}
interface Ichange//定义了一个接口
{
string changething(string thing);
}
class Machinecat : Cat, Ichange//定义了个机器猫,继承父类猫,并使用了接口Ichange
{
public Machinecat()
: base()
{ }
public Machinecat(string name)
: base(name)
{ }
public string changething(string thing)
{
return base.shout ()+ "我有万能口袋,我可以变出:" + thing;
}
}
下边是客户端的代码:
//private Animal[] arrayAnimal;//声明一个动物数组
//集合的使用
IList<Animal> arrayAnimal;//声明一个泛型集合变量,用接口Ilist,注意Ilist<Animal>表示此集合变量只能接受Animal类型
//猫叫的按钮事件
private void button1_Click(object sender, EventArgs e)
{
Cat cat = new Cat("咪咪"); //类的实例化
cat.ShoutNum = 7;
MessageBox.Show(cat.shout());
}
//狗叫的按钮事件
private void button2_Click(object sender, EventArgs e)
{
Dog dog = new Dog("旺财");//这里只是简单的调用方法,即可实现目的,体现了封装的特性
dog.ShoutNum = 6;
MessageBox.Show(dog.shout());
}
//动物报名的按钮
private void button3_Click(object sender, EventArgs e)//动物报名按钮,
{
//arrayAnimal = new Animal[5];//实例化最多可以可报名5个的动物数组对象
arrayAnimal = new List<Animal> ();//实例化List对象
arrayAnimal.Add(new Cat ("小花"));//报名分别是猫和狗
arrayAnimal.Add( new Dog("阿毛"));
arrayAnimal.Add ( new Dog("小黑"));
arrayAnimal.Add(new Cat("娇娇"));
arrayAnimal.Add( new Cat("咪咪"));
MessageBox.Show(arrayAnimal.Count.ToString());//打印出我们添加的个数
arrayAnimal.RemoveAt(1);//这里还可以删除我们多添加的。
}
//让报名的所有动物进行叫声比赛
private void button4_Click(object sender, EventArgs e)
{
foreach (Animal item in arrayAnimal)//遍历整个数组,让他们一次实施shout的方法
{
MessageBox.Show(item.shout());
}
}
//叮当猫变出东西的事件代码
private void button5_Click(object sender, EventArgs e)
{
Machinecat mcat = new Machinecat("叮当");//实例化机器猫
Machinecat mcat1 = new Machinecat("叮当2");
Ichange[] array = new Ichange[2];//声明一个接口数组,将两个实例赋值给数组
array[0] = mcat;
array [1]=mcat1;
MessageBox.Show(array[0].changething("各种各样的东西!"));//利用多态性,实现不同的changething
MessageBox .Show (array[1].changething ("好多好多东西哈!"));
}
这个学习也是非常基础的,学习设计模式的基础!
分享到:
相关推荐
视频教程-C#面向对象基础01
C# 面向对象编程的原理 属性 事物 状态 抽象 计算机语言 方法(函数) 事物 行为 抽象 计算机语言
C#中面向对象编程(基础篇) C#中面向对象编程(基础篇).pdf
【传智播客.Net培训—C#面向对象基础】01面向对象简介1
C#面向对象基础教程 电子书 《C#面向对象基础教程》以C#语言面向对象的知识体系为主线,采用典型案例引导、任务驱动的模式进行编写。在内容的安排上遵循“实用、够用、应用”的原则,从基本知识、应用技能出发,介绍...
C#编程语言与面向对象基础教程,既介绍了C#这门语言,又教你如何面向对象开发。
C#面向对象 基础概念25个.pdf
C# 面向对象 基础教程 C#_编程语言与面向对象基础教程.pdf
深入浅出的指导面向对象——C#的入门,各种案例强化对C#的认识。
C#编程语言与面向对象基础教程.rar
C#面向对象基础全部讲义C#面向对象基础全部讲义C#面向对象基础全部讲义
本书是一本基础教程,主要介绍面向对象的编程思想,语言C#
c#面向对象编程c#,oop 面向对象的基础第一课
传智播客_C_面向对象基础-苏坤
C#编程语言与面向对象基础教程.rar.rar
苏坤老师的第二季:C#面向对象基础,从视频讲课中整理出来的笔记,希望对你有用
全书分为三部分,共22章,全面详细地解说了C#的技术要点,包括C#语言基础、C#的面向对象特征、异常处理、委托与事件、集合、泛型、字符串与正则表达式、特性、反射、程序集与版本控制、.NET框架的内存管理、多线程、...
出自湖南软件职业学院大二C#面向对象学习PPT 非常实用,对面向对象讲得比较透彻.大家一起学好C#```.