C#中其他的OOP技术

 面向对象编程有很多特点,例如继承,封装,多态等。有关继承的知识前面已经介绍了一点,现在来具体介绍下封装和多态。

一.封装

类是属性和方法的集合,所谓封装就是在具体定义了某个方法或者属性以后,开发人员只要知道如何使用这些方法和属性而不必要知道所调用的方法或者属性的具体实现过程。犹如在开车过程中的刹车,驾驶员知道在某个时候刹车就可以了,但是不要去关注刹车的过程是怎么实现的,这个是汽车设计员的工作。

Person man = new Person("lixiao", "woman", 11, 88); man.Eat(12);在上面这个小例子,我们创建了一个Person类对象man,调用Person类的方法Eat()--man.Eat(12),但是这个方法具体实现过程在这里是不可见的。这就是所谓的封装。

二.多态

  多态是面向对象编程的一个重要特点,在C#环境下的多态就是重载和覆写。关于重载这个概念以前讲过:在一个类中,两个以上的方法有着相同的名字,不同的参数类型,但是返回值可以不相同,犹如下面的例子。

public void hi()

{

Console.WriteLine("hi,C Sharp");

}

public void hi(string name)

{

Console.WriteLine("hi,{0}",name);

}

覆写就是子类为了实现某一个功能而重复定义父类的某个方法,覆写方法比重载方法要更加严格:只有虚方法和抽象方法才可以被覆写,同时覆写时必须满足一下几个条件:相同的方法名字,参数列表和返回值类型,缺一不可。

例如下面的例子:左边的时基类Person中的一个方法,右边的时Student类继承 Person类后覆写Getweight()方法的过程。

 

 

多态的一个结果就算派生于基类的类在方法和属性上有一定的重叠,因此可以用相同的语法处理从同一个基类实例化的对象,比如类student和worker都是从Person类继承下来的,那么两个子类的对象都可以调用Person类的eat()方法。

class Student : Person

Student Luxiaofeng = new Student();

Luxiaofeng.Eat(15);

class Work : Person

Work sub_work = new Work();

sub_work.Eat(15);

三.对象之间的关系

对象之间除了继承这个简单的关系之外还有两种比较重要的关系:包含和集合。

1.包含关系:一个类包含另一个类,与继承相比,包含类可以控制对被包含类的成员的访问,甚至在使用被包含类的成员之前进行其他的处理。

2.集合关系:一个类用作类一个类的多个实例的容器,集合包含索引,排序和重新设计大小等功能。

对象的集合关系和数组的使用方法相似,例如定义一个集合:Student[] mystu = new Student[20];但是集合和数组的主要区别:集合通常可以执行额外的添加和删除集合中的项的功能。而且集合有个Item属性,它可以根据对象的索引返回该对象。

四.事件

对象可以激活事件,在C#的Window编程中经常要处理事件,例如按下一个按钮或者点击一些图标会发生哪些事件,C#要编程处理这些引发的事件。在Window程序设计过程中,事件时必不可少的。下面先看一个简单的Window应用程序。

 

int count = 0;

int coun1= 0;

private void button1_Click(object sender, EventArgs e)

{//点击button1事件处理

count++;

textBox1.Text = count.ToString();

}

private void button2_Click(object sender, EventArgs e)

{//点击button2 事件处理

count--;

textBox1.Text = count.ToString();

}

在Form1中添加Textbox,Label,Button控件各两个,coun和coun1分别用来统计点击两个Button控件的次数,然后再显示在TextBox上。

五.引用类型和数值类型

在C#中,数据根据变量的类型以两种方式的一种存在一个变量中,这两种方式分别是引用类型和值类型。两者的区别主要是:

1、值类型在内存的一个地方存储它们自己和它们的内容;

2、引用类型在内存中的一个地方存储一个引用,另一个地方存储内容。

到目前为止,所使用的String变量(引用类型)和其他简单的变量(int)的方式完全一样,只不过引用类型的值可以是null,而值类型总是包含一个值。string name=null; int id=0;如果定义了name后不赋值或者令它等于null,系统会提示:name没有初始化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值