这里我们接着上一篇博客,继续学习用C#实现面向对象中的概念。这里学习下边几个,当然我们还是通过动物比赛的例子。

多态:表示不同的对象可以执行相同的动作,但是通过它们自己的实现代码来执行。这里需要将父类将该成员声明为虚拟的,而且用到了方法重写(override).

抽象类:用abstract声明抽象类,注意抽象类不能实例化,抽象方法必须被子类重写。

接口:是把隐式公共方法和属性组合起来,以封装特定的功能的一个集合,一旦类实现了接口,就可以支持接口所指定的所有属性好成员。一个类可以支持多个接口,多个类也可以支持相同的接口。

集合:是优于数组,.NET Framework提供了用于数据存储和检索的专用类。集合随着我们向里边添加元素而自动增加,自动调节大小。提供了对堆栈,队列和哈希表的支持。

泛型:具有占位符(即参数类型)的类,结构,接口和方法。和集合紧密联系,泛型集合可以获得类型安全的直接优点。也就是说类型固定了。

下边我们通过这个例子来理解上边的概念:

定义类和接口的代码:

 [csharp] view plaincopyprint?
<span style="font-size:18px;"> abstract class Animal//利用关键字abstract定义了一个抽象类
{
protected string name = "";
public Animal(string name)
{
this.name = name;
}
public Animal()
{
this.name = "无名";
} protected int shoutNum = ;//叫声的次数
public int ShoutNum
{
get
{
return shoutNum;
}
set
{
shoutNum = value;
}
} public string shout()//叫声发出的代码
{
string result = "";
for (int i = ; 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;
}
}</span>

下边是客户端的代码:

[csharp] view plaincopyprint?
<span style="font-size:18px;"> //private Animal[] arrayAnimal;//声明一个动物数组
//集合的使用
IList<Animal> arrayAnimal;//声明一个泛型集合变量,用接口Ilist,注意Ilist<Animal>表示此集合变量只能接受Animal类型 //猫叫的按钮事件
private void button1_Click(object sender, EventArgs e)
{
Cat cat = new Cat("咪咪"); //类的实例化
cat.ShoutNum = ; MessageBox.Show(cat.shout());
}
//狗叫的按钮事件
private void button2_Click(object sender, EventArgs e)
{
Dog dog = new Dog("旺财");//这里只是简单的调用方法,即可实现目的,体现了封装的特性
dog.ShoutNum = ;
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();//这里还可以删除我们多添加的。 }
//让报名的所有动物进行叫声比赛
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[];//声明一个接口数组,将两个实例赋值给数组
array[] = mcat;
array []=mcat1; MessageBox.Show(array[].changething("各种各样的东西!"));//利用多态性,实现不同的changething
MessageBox .Show (array[].changething ("好多好多东西哈!"));
}</span>

这个学习也是非常基础的,学习设计模式的基础!

C#VS面向对象基础(二)的更多相关文章

  1. PYTHON开发--面向对象基础二

    一.成员修饰符 共有成员 私有成员, __字段名 - 无法直接访问,只能间接访问 1.     私有成员 1.1  普通方法种的私有成员 class Foo: def __init__(self, n ...

  2. Java面向对象基础二

    1.对象的用法 2.多对象的创建方法 3.匿名对象的创建和用法

  3. java面向对象基础(二)

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  4. Python基础:面向对象基础(二) 继承

    子类在继承的时候,在定义类时,小括号()中为父类的名字,父类的属性.方法,会被继承给子类,Python中允许多继承. 多继承 # 父类 Master class Master(object): def ...

  5. Java学习 · 初识 面向对象基础二

    Package 为什么需要使用package a)   解决类重名的问题 b)   便于管理类 怎么使用package a)   类的第一句非注释性语句 b)   命名:域名倒着写,再加上模块名 注意 ...

  6. 【重走Android之路】【Java面向对象基础(二)】细说String、StringBuffer和StringBuilder

    [重走Android之路][基础篇(二)][Java面向对象基础]细说String.StringBuffer和StringBuilder   1.String String是Java中的一个final ...

  7. Python 基础 面向对象之二 三大特性

    Python 基础 面向对象之二 三大特性 上一篇主要介绍了Python中,面向对象的类和对象的定义及实例的简单应用,本篇继续接着上篇来谈,在这一篇中我们重点要谈及的内容有:Python 类的成员.成 ...

  8. MYSQL、PHP基础、面向对象基础简单复习总结

    一.MYSQL         1.配置MySql                 第一步安装服务器(apache).                 第二部安装MySql界面程序         2 ...

  9. 从零开始学Python第六周:面向对象基础(需修改)

    标签(空格分隔): 面向对象 一,面向对象基础 (1)面向对象概述 面向过程:根据业务逻辑从上到下写代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类 ...

  10. 8.python笔记之面向对象基础

    title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...

随机推荐

  1. unity 3d 生成apk文件时,设置图标

    如图所示:注意红线标注部分: 如果安装到手机之后,程序的图标还是unity的默认图标,重启手机即可.

  2. Windows Live Writer针对CNBLOG的代码高亮插件

    一,CodeHighlighter 1. 下载插件 下载地址:http://files.cnblogs.com/files/cmt/WindowsLiveWriter.CNBlogs.CodeHigh ...

  3. 关于mysql binlog日志的格式说明

    Binary Log 记录方式 Row Level Binary Log会记录成每一行数据被修改的形式,然后在Slave端再对相同的数据进行修改. 如果修改了表的结构,那么binlog日志记录的是重新 ...

  4. 嵌套iframe中的HTML的文档解析类型

    问题:页面整个刷新时,IE11输入框显示的宽度和高度正常,对页面中的iframe部分刷新时,IE11输入框的宽度和高度就变小了. 原因:网页的头部定义了文档类型<!DOCTYPE html> ...

  5. 初探JS-html5移动端发送指定内容短信到指定号码

    原理:利用a标签跳转指定网址: sms://[号码]?body=[内容] //安卓 sms://[号码]&body=[内容] //IOS 首先简单的做两个input,一个用于输入内容,一个用于 ...

  6. [Effective Modern C++] Item 2. Understand auto type deduction - 了解auto类型推断

    条款二 了解auto类型推断 基础知识 除了一处例外,auto的类型推断与template一样.存在一个直接的从template类型推断到auto类型推断的映射 三类情况下的推断如下所示: // ca ...

  7. List小练习

    功能:创建链表节点,删除节点,顺序打印,不改变原结构的情况下分别用STL中的stack实现逆序打印和利用函数递归打印 代码如下: //链表问题struct ListNode {    int m_nV ...

  8. ecshop各个文件夹作用

    Images文件夹: 这个文件夹下有子文件夹,在这些子文件夹下面存放着当前网站商品的原始图片和缩略图.这些子文件夹命名有规律的,它们的文件名是它们目录下商品加入 的年月份.也就是说在同一个月份加入的商 ...

  9. How Many Tables(并查集)

    How Many Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  10. Java GC机制和对象Finalize方法的一点总结

    GC是垃圾收集的意思(Garbage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超 ...