前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C# 继承 基类和派生类基类的初始化C# 多重继承

C# 继承 基类和派生类基类的初始化C# 多重继承

作者头像
酱紫安
发布2020-07-24 17:29:24
4.5K0
发布2020-07-24 17:29:24
举报
文章被收录于专栏:python学习路

C# 继承

继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。

当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类,这个新的类被称为派生类

继承的思想实现了 属于(IS-A) 关系。例如,哺乳动物 属于(IS-A) 动物,狗 属于(IS-A) 哺乳动物,因此狗 属于(IS-A) 动物。

基类和派生类

一个类可以派生自多个类或接口,这意味着它可以从多个基类或接口继承数据和函数。

C# 中创建派生类的语法如下:

代码语言:javascript
复制
<访问修饰符符> class <基类>
{
 ...
}
class <派生类> : <基类>
{
 ...
}

假如一个基类是Shape,一个派生类是Rectangle。

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace week2._1
{    
    // 基类
    class Shape
    {     
        public void setLength(int len)
        {
            length = len;
        }
        public void setWidth(int wid)
        {
            width = wid;
        }
        protected int length;
        protected int width;
    }
    //派生类
    class Rectangle : Shape
    {
        private int height;
        public int getArea()
        {
            return length * width;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            //创建对象
            Rectangle rect = new Rectangle();
            rect.setLength(5);
            rect.setWidth(6);
            
            Console.WriteLine(rect.getArea());
            Console.ReadLine();
        }
    }
}

结果:

代码语言:javascript
复制
30

基类的初始化

派生类继承了基类的成员变量和成员方法。因此父类对象应在子类对象创建之前被创建。您可以在成员初始化列表中进行父类的初始化。

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace week2._1
{
    class Rectangle
    {
        //成员变量
        protected double width;
        protected double lenght;
        //构造方法
        public Rectangle(double l, double w)
        {
            width = w;
            lenght = l;
        }
        //面积
        public  double GetArea()
        {
            return width *lenght;
        }
        //显示
        public void Display()
        {
            Console.WriteLine("长度:{0}", lenght);
            Console.WriteLine("宽度:{0}", width );
            Console.WriteLine("面积:{0}", GetArea());
        }
        //继承Rectangle
        class Tabletop : Rectangle
        {
            private double cost;
            public Tabletop(double l,double w) : base(l, w)
            {
            }
            public double Getcost()
            {
                double cost;
                cost = GetArea() * 70;
                return cost;
            }
            //重写Display方法
            public void Display()
            {
                //base.Display();
                Console.WriteLine("成本:{0}", Getcost());
            }
        }
        class Test
        {
            static void Main(string[] args)
            {
                Tabletop t = new Tabletop(4.5, 5.5);
                t.Display();
                Console.ReadKey();

            }
        }
    }
    
}

结果:

代码语言:javascript
复制
成本:1732.5

C# 多重继承

多重继承指的是一个类别可以同时从多于一个父类继承行为与特征的功能。与单一继承相对,单一继承指一个类别只可以继承自一个父类。

C# 不支持多重继承。但是,您可以使用接口来实现多重继承。下面的程序演示了这点:

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace week2._1
{
    class Shape
    {
        protected int  width;
        protected int  height;
        public void setWidth(int w)
        {
            width = w;
        }
        public void setHeight(int h)
        {
            height = h;
        }
    }
    //基类PaintCost
    public interface PaintCost
    {
        int getCost(int area);
    }
    //派生类
    class Rectangle: Shape, PaintCost
    {
        public int getArea()
        {
            return width * height;
        }
        public int getCost(int area)
        {
            return area * 70;
        }
 
    }

    class test
    {
        static void Main(string[] args)
        {
            Rectangle r = new Rectangle();
            int area;
            r.setHeight(7);
            r.setWidth(8);
            area = r.getArea();
            Console.WriteLine(area);
            Console.WriteLine(r.getCost(area));
            Console.ReadKey();
        }
    }
    
}

结果:

代码语言:javascript
复制
56
3920

关于继承的几点:

  • 1、继承的语法:class 子类类名 : class 父类类名{ //子类类体 }
  • 2、继承的特点:子类拥有所有父类中所有的字段、属性和方法
  • 3、一个类可以有多个子类,但是父类只能有一个
  • 4、一个类在继承另一个类的同时,还可以被其他类继承
  • 5、在 C# 中,所有的类都直接或者间接的继承自 Object 类
代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace week2._1
{
    class Program
    {
        class father
        {
            public father()
            {
                Console.WriteLine("father");
            }
        }
        class son : father
        {
            public son()
            {
                Console.WriteLine("son");
            }
        }
        static void Main(string[] args)
        {
            son s = new son();
            Console.ReadKey();
        }
    }
}

结果:

代码语言:javascript
复制
father
son
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • C# 继承
    • 基类和派生类
      • 基类的初始化
        • C# 多重继承
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档