继承,接口,构造函数一篇就懂

C#继承,接口,构造函数一篇就懂

继承

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

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

继承的思想实现了 属于(IS-A) 关系。例如,哺乳动物 属于(IS-A) 动物,狗 属于(IS-A) 哺乳动物,因此狗 属于(IS-A) 动物
copy:菜鸟编程 C#继承

接口

接口定义了所有类继承接口时应遵循的语法合同。接口定义了语法合同 “是什么” 部分,派生类定义了语法合同 “怎么做” 部分。

接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构。

接口使得实现接口的类或结构在形式上保持一致。

抽象类在某种程度上与接口类似,但是,它们大多只是用在当只有少数方法由基类声明由派生类实现时。

接口本身并不实现任何功能,它只是和声明实现该接口的对象订立一个必须实现哪些行为的契约。

抽象类不能直接实例化,但允许派生出具体的,具有实际功能的类
C#接口

构造函数

每当创建类或结构时,将会调用其构造函数。 类或结构可能具有采用不同参数的多个构造函数。 使用构造函数,程序员能够设置默认值、限制实例化,并编写灵活易读的代码。 有关详细信息和示例,请参阅使用构造函数和实例构造函数。(copy 微软官方文档)
构造函数的定义

实例代码

关于三个知识的理论点可通过下面链接去看看,个人觉得还是写的比较易懂
我这里直接写一个关于三个知识点的练习。

实例:
长方形(基类),拥有长和宽(属性),面积(构造函数)
桌子(派生类)也属于(继承)长方形,桌子拥有费用(属性)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace C_ClassDemo
{
    class Program
    {
        static void Main(string[] args)
        {
           //实例化一张桌子,这个桌子长4.5,宽7.5
            Table t = new Table(4.5,7.5);
            t.Display();
            Console.Read();
        }
    }
    //长方形基类
    class Rectangle
    {
        //长方形拥有,长宽两个属性。定义长宽
        protected double length;
        protected double width;
        //初始化长方形的属性
        public Rectangle(double l, double w) 
        {
            this.length = l;
            this.width = w;
        }

        //计算面积
        public double GetArea() 
        {
            return length * width;
        }

        //显示需要输出的信息
        public void Display() 
        {
            Console.WriteLine("长度:{0}",length);
            Console.WriteLine("宽度:{0}", width);
            Console.WriteLine("面积:{0}",GetArea());
        }
    }
    //桌子是派生类,继承自长方形类,长方形是父类
    class Table : Rectangle 
    {
        //定义费用
        private double cost;
       
        //继承父类的构造方法,就拥有了长,宽属性
        public Table(double l, double w) : base(l, w) 
        {
             
        }

        //计算花费
        public double GetCost() 
        {
            double cost;
            cost = GetArea() * 70;
            return cost;
        }

        //显示桌子需要输出的信息
        public void Display() 
        {
            //先调用父类的输出信息,显示长,宽,面积,
            base.Display();
            //输出桌子的花费属性。
            Console.WriteLine("成本:{0}",GetCost());
        }
    }
}

输出结果:
输出结果
我们现在想知道一张桌子的长宽面积以及费用,
就需要先new 一张桌子出来(实例化对象),桌子在出厂的时候,就拥有了长和宽(对象的初始化)。有了构造函数,就不必new一张桌子 之后进行
table.length=4.5
table.width=7.5 这项工作。
直接调用桌子.display()显示包,即可一键显示信息。

但是 桌子的功能有些什么呢??

按照刚刚的思路来,在写一个功能类,然后桌子继承功能!
但是
在这里插入图片描述
所以我们用一个功能接口来实现 功能的输出

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace C_ClassDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //实例化一张桌子,这个桌子长4.5,宽7.5
            Table t = new Table(4.5, 7.5);
           //显示桌子的基本信息和作用
            t.Display();
            t.Eat();
            Console.Read();
        }
    }
    //长方形基类
    class Rectangle
    {
        //长方形拥有,长宽两个属性。定义长宽
        protected double length;
        protected double width;
        //初始化长方形的属性
        public Rectangle(double l, double w)
        {
            this.length = l;
            this.width = w;
        }

        //计算面积
        public double GetArea()
        {
            return length * width;
        }

        //显示需要输出的信息
        public void Display()
        {
            Console.WriteLine("长度:{0}", length);
            Console.WriteLine("宽度:{0}", width);
            Console.WriteLine("面积:{0}", GetArea());
        }
    }
    //桌子是派生类,继承自长方形类,长方形是父类,继承功能接口
    class Table : Rectangle,Ieffect
    {
        //定义费用
        private double cost;


       
        //继承父类的构造方法,就拥有了长,宽属性
        public Table(double l, double w) : base(l, w)
        {

        }

        //计算花费
        public double GetCost()
        {
            double cost;
            cost = GetArea() * 70;
            return cost;
        }

        public void Eat()
        {
            Console.WriteLine("桌子可以用来吃饭");
        }

        //显示桌子需要输出的信息
        public void Display()
        {
            //先调用父类的输出信息,显示长,宽,面积,
            base.Display();
            //输出桌子的花费属性。
            Console.WriteLine("花费:{0}", GetCost());
           
            
        }

       
    }

    //功能接口
    interface Ieffect
    {
        //吃饭
        void Eat();
     }
}

输出结果:
在这里插入图片描述
三个点,在平时练习中似乎作用不大,但到了正式项目中,可以减少很多代码的重复量!

本人菜鸟,写的不好,请见谅,如有错误,请指出

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值