当前位置:编程学习 > C#/ASP.NET >>

C#基础解析之Ⅵ(继承)

今天和大家探讨C#中面向对象的特性之二---继承

何为继承?简单的一句话就是:建立类之间的关系,实现代码的重用性,方便系统扩展。说白了就是两个关键点:a.避免代码的冗余,b.进行程序扩展。

接下来我们进行更进一步的了解继承,继承是面向对象程序设计的主要特征之一,它可以让使代码的重用性大大加强,可以节省程序设计的时间。继承就是在类之间建立一种相交关系,使得新定义的派生类的实例可以继承已有的基类的特征和能力,而且可以加入新的特性或者是修改已有的特性建立起类的新层次,比如子类(派生类)可以继承父类(基类) 某些成员,继承和类的成员方法一样,我们也可以定义属性的重载、虚属性、抽象属性以及密封属性的概念。继承的两大特性是传递性和单根性。

在生活中我们也实现了继承比如:

 \ 


 

我们还是先来看个简单的例子:
创建父类:
 1 class Dog
 2     {
 3         string type;//类型
 4         public string Type
 5         {
 6             get { return type; }
 7             set { type = value; }
 8         }
 9         int weight;//体重
10         public int Weight
11         {
12             get { return weight; }
13             set { weight = value; }
14         }
15         int height;//高度
16         public int Height
17         {
18             get { return height; }
19             set { height = value; }
20         }
21         public Dog() { }//无参数的构造方法
22         public Dog(string t, int w, int h)//带参数的构造方法
23         {
24             this.type = t;
25             this.weight = w;
26             this.height = h;
27         }
28     }

添加Dog的子类
 1 class Collie : Dog//子类
 2     {
 3         public Collie()//无参数的构造方法
 4         {
 5             this.Type = "柯利犬";
 6             this.Weight = 34;
 7             this.Height = 66;
 8         }
 9         public void Act()//方法输出柯利犬的特点
10         {
11             Console.WriteLine("性格:温和,活泼,忠实,亲切");
12         }
13     }
14     class SheltlandSheepdog : Dog//子类
15     {
16         public SheltlandSheepdog()//无参数的构造方法
17         {
18             this.Type = "喜乐蒂";
19             this.Weight = 18;
20             this.Height = 30;
21         }
22         public void Act()//方法输出喜乐蒂的特点
23         {
24             Console.WriteLine("性格:温和而忠实,聪明的犬种");
25         }
26     }

在Main方法中实例化子类对象并调用它们的方法:
 1 static void Main(string[] args)
 2         {
 3             Console.WriteLine("柯利犬的特点");
 4             Collie collie = new Collie();
 5             collie.Act();//调用方法www.zzzyk.com
 6             Console.WriteLine("喜乐蒂的特点");
 7             SheltlandSheepdog sheltlandsheepdog = new SheltlandSheepdog();
 8             sheltlandsheepdog.Act();//调用方法
 9             Console.ReadKey();
10         }

运行结果:

  \


 

base关键字
在继承中base关键字是专门用来继承父类的。在我们运用的时候一般是在重写、覆盖还有构造函数里面来调用父类里面的这个方法时用:base(),这个base好像和JAVA里面的super相似(本人是搞.net的,对JAVA不是很了解)。C#里面和base差不多的还有一个就是this了!其实这两个用起来也很相似,不过还是有区别的,this是指向本身,base是指向父类。就比如说:你在父类里面int n;你在子类里面也int n; 那么此时base.n和this.n表示的就不是同一个变量了,但是如果子类里面没有定义n,那么base.n和this.n就是同一个变量了。
结合上例base 在带参数的构造方法中的使用
public qingpingguo(string t,int w,int h):base(t,w,h){}
我们继续看一下继承的传递性
派生类是从基类那里继承特性,那么派生类也可以作为其它类的基类。从一个基类派生出来多层类,这样就形成了类层次结构。就好比汽车为基类,然后汽车又分为卡车和公共汽车,那么卡车和公共汽车就是派生类,卡车又可以作为基类派生出小型卡车和重型卡车。简单的说就是子类不仅仅能够继承父类的成员,还继承了父类的父类的成员。我们来看一张图就会明白了:

 \ 


 

继承的单根性
继承的单根性是指子类只能继承一个父类,不能同时继承多个父类。就好比儿子只能有一个父亲(亲生的),派生类只能从一个类中继承,继承不支持多重继承。这样规定是为了避免代码结构的复杂性。

最后介绍两个属性:

一个是抽象属性
使用abstract 修饰符声明的属性为抽象属性。
抽象属性的访问器也是虚的,而且没有提供访问器的具体实现。这就要求在非虚的派生类中,由派生类自己通过重载属性来提供对访问器的具体实现。
abstra

补充:软件开发 , C# ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,