首页 > 编程语言 >C# 继承

C# 继承

时间:2024-04-05 15:44:42浏览次数:33  
标签:created C# Being 继承 int Human public 构造函数

继承是使用已经定义的类形成新类的方法。 新形成的类称为派生的类,我们派生的类称为基类。 继承的重要好处是代码重用和降低程序的复杂性。 派生类(后代)将覆盖或扩展基类(祖先)的功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Program.
using System;

namespace Inheritance
{
    class Being
    {
        public Being()
        {
            Console.WriteLine("Being is created");
        }
    }

    class Human : Being
    {
        public Human()
        {
            Console.WriteLine("Human is created");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            new Human();
        }
    }
}

在此程序中,我们有两个类。 基类Being和派生的Human类。 派生类继承自基类。

class Human : Being

在 C# 中,我们使用冒号(:)运算符创建继承关系。

new Human();

我们实例化派生的Human类。

1
2
3
$ dotnet run
Being is created
Human is created

我们可以看到两个构造函数都被调用了。 首先,调用基类的构造函数,然后调用派生类的构造函数。

接下来是一个更复杂的示例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Program.
using System;

namespace Inheritance2
{
    class Being
    {
        static int count = 0;

        public Being()
        {
            count++;
            Console.WriteLine("Being is created");
        }

        public void GetCount()
        {
            Console.WriteLine("There are {0} Beings", count);
        }
    }

    class Human : Being
    {
        public Human()
        {
            Console.WriteLine("Human is created");
        }
    }

    class Animal : Being
    {
        public Animal()
        {
            Console.WriteLine("Animal is created");
        }
    }

    class Dog : Animal
    {
        public Dog()
        {
            Console.WriteLine("Dog is created");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            new Human();

            var dog = new Dog();
            dog.GetCount();
        }
    }
}

我们有四个班。 继承层次更加复杂。 HumanAnimal类继承自Being类。 Dog 类直接继承自Animal类,并间接继承自Being类。 我们还介绍了static变量的概念。

static int count = 0;

我们定义一个static变量。 静态成员是类的所有实例共享的成员。

1
2
3
4
5
Being()
{
    count++;
    Console.WriteLine("Being is created");
}

每次实例化Being类时,我们将 count 变量增加一。 这样,我们就可以跟踪创建的实例数。

1
2
3
4
5
class Animal : Being
...

class Dog : Animal
...

Animal继承自BeingDog继承自Animal。 Dog也间接继承自Being

1
2
3
new Human();
var dog = new Dog();
dog.GetCount();

我们从HumanDog类创建实例。 我们称为 Dog 对象的GetCount()方法。

1
2
3
4
5
6
7
$ dotnet run
Being is created
Human is created
Being is created
Animal is created
Dog is created
There are 2 Beings

Human调用两个构造函数。 Dog调用三个构造函数。 有两个实例化的存在。

我们使用base关键字显式调用父级的构造函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Program.
using System;

namespace Shapes
{
    class Shape
    {
        protected int x;
        protected int y;

        public Shape()
        {
            Console.WriteLine("Shape is created");
        }

        public Shape(int x, int y)
        {
            this.x = x;
            this.y = y;
        }
    }

    class Circle : Shape
    {
        private int r;

        public Circle(int r, int x, int y) : base(x, y)
        {
            this.r = r;
        }

        public override string ToString()
        {
            return String.Format("Circle, r:{0}, x:{1}, y:{2}", r, x, y);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var c = new Circle(2, 5, 6);
            Console.WriteLine(c);
        }
    }
}

我们有两个类:Shape类和Circle类。 Shape类是几何形状的基类。 我们可以在此类中加入一些常见形状的共同点,例如xy坐标。

1
2
3
4
5
6
7
8
9
10
public Shape()
{
    Console.WriteLine("Shape is created");
}

public Shape(int x, int y)
{
    this.x = x;
    this.y = y;
}

Shape类具有两个构造函数。 第一个是默认构造函数。 第二个参数有两个参数:x,y 坐标。

1
2
3
4
public Circle(int r, int x, int y) : base(x, y)
{
    this.r = r;
}

这是Circle类的构造函数。 此构造函数启动r成员并调用父级的第二个构造函数,并向其传递xy坐标。 如果不使用base关键字显式调用构造函数,则将调用Shape类的默认构造函数。

1
2
$ dotnet run
Circle, r:2, x:5, y:6

这是示例的输出。

标签:created,C#,Being,继承,int,Human,public,构造函数
From: https://www.cnblogs.com/lvbjj/p/18115812

相关文章

  • C# 抽象类和方法
    抽象类无法实例化。如果一个类至少包含一个抽象方法,则也必须将其声明为抽象方法。抽象方法无法实现;他们只是声明方法的签名。当我们从抽象类继承时,所有抽象方法都必须由派生类实现。此外,必须以较少受限制的可见性声明这些方法。与接口不同,抽象类可能具有完全实现的方法,并且......
  • AC不了的看过来!ASCLL码(一本通练40.3)
    题目描述相信大家一定都知道大名鼎鼎的ASCII码,这次给你的任务是输入数字(表示ASCII码),输出相对应的字符信息。输入第一行为一个整数 T(1≤T≤1000)。接下来包括 T 个正整数,由空白符分割。(空白符包括空格、换行、制表符)这些整数不会小于32。输出在一行内输出相应的字......
  • P4329 [COCI2006-2007#1] Bond
    原题链接题解二进制dpetc:令\(dp[00110]\)代表前两个任务选23两个人出战的最大成功率则\(dp[00110]=max(dp[00010]+a[3][2],dp[00100]+a[2][3])\)code#include<bits/stdc++.h>usingnamespacestd;doublea[25][25]={0};doubledp[1<<22]={0};intcal(intnow){......
  • Qt 处理excel
    处理Excel文件在Qt中通常涉及到使用第三方库,因为Qt本身并不直接支持Excel文件的读写。下面我将提供一个使用QAxObject(ActiveX封装)来操作Excel的基本代码示例。请注意,这个方法要求你的系统上安装有MicrosoftExcel。首先,确保你的Qt项目配置中包含了ActiveQt模块。在你的.pro文......
  • lessc assets/index.less assets/index.css这个命令的作用是什么?
    lesscassets/index.lessassets/index.css这个命令的作用是什么?lesscassets/index.lessassets/index.css这条命令是用来编译Less样式表文件的。具体来说,它的作用如下:lessc:这是Less编译器的命令行工具(lesscstandsforlesscompiler)。它是Less预处理器的一个组成......
  • Yann Lecun-纽约大学-深度学习(PyTorch)
    课程介绍    本课程涉及深度学习和表示学习的最新技术,重点是有监督和无监督的深度学习,嵌入方法,度量学习,卷积和递归网络,并应用于计算机视觉,自然语言理解和语音识别。前提条件包括:DS-GA1001数据科学入门或研究生水平的机器学习课程。     免费获取:YannLecun-纽约......
  • 一文了解PCIe 6.0的基础和测试
    2022年PCI-SIG组织宣布PCIe6.0规范标准v1.0版本正式发布,宣告完工。延续了惯例,带宽速度继续增倍,x16下可达128GB/s(单向),由于PCIe技术允许数据全双工双向流动,因此双向总吞吐量就是256GB/s。• Definitions/MetricstoHelpFrameServerDesignChallenges•Disaggregatio......
  • OpenAI劲敌出手!Claude 3正式发布,全面超越GPT-4。Claude3模型特点和使用教程分享
    已有GPT官方账号不会升级GPT4请参考:【国内如何用gpt4?如何升级gpt4?保姆级教程】一、Claude震撼发布焦点分析1.Claude震撼发布北京时间2024年3月4日晚间,Anthropic,毫无预警地发布了最新一代大模型Claude3,距离上一代的Claude2发布,仅相隔8个月。Claude发布了最新的大模型Cla......
  • 举例:配置动态LACP模式Eth-Trunk
    举例:配置动态LACP模式Eth-Trunk组网需求如图3-13所示,服务器A与DeviceA建立动态LACP模式链路聚合,两端设备将通过动态LACP协议报文进行链路聚合协商。图3-13 动态LACP模式Eth-Trunk组网图本例中interface1、interface2、interface3分别代表10GE1/0/1、10GE1/0/2、10GE1/0/......
  • dask读取hdfs文件时报错connect hdfs error
    问题详情:/arrow/cpp/src/arrow/filesystem/hdfs.cc:51:Failedtodisconnecthdfsclient:IOError:HDFShdfsFS::Disconnectfailed,errno:9(Badfiledescriptor)Traceback(mostrecentcalllast):File"/home/tdops/fucheng.pan/ray-code/read.py",line......