欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-05 19:45:59
...

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();
     }
}

输出结果:
继承,接口,构造函数一篇就懂
三个点,在平时练习中似乎作用不大,但到了正式项目中,可以减少很多代码的重复量!

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

相关标签: c# c#