亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

掌握 C# 继承:概念、类型与实战代码完全指南

C# 继承详解

本指南涵盖 C# 继承基础、各种形式及实战代码示例。

C# 继承允许创建从现有类派生的新类,形成父类(基类)与子类(派生类)关系。这一 OOP 强大特性促进代码复用与逻辑组织。

基类提供字段、属性、方法供派生类继承,子类可在保留共享逻辑的同时扩展或定制行为。


如何在 C# 中声明继承

C# 中用冒号 (:) 表示继承:

class Animal {
    // 字段和方法
}
// Dog 继承自 Animal
class Dog : Animal {
    // Animal 的字段和方法
    // Dog 自己的字段和方法
}

Dog 扩展 Animal,获得其成员访问权。下图展示关系。

掌握 C# 继承:概念、类型与实战代码完全指南

示例:基础继承

using System;
namespace Inheritance {
    // 基类
    class Animal {
        public string name;
        public void Display() {
            Console.WriteLine("I am an animal");
        }
    }
    // 派生类
    class Dog : Animal {
        public void GetName() {
            Console.WriteLine("My name is " + name);
        }
    }
    class Program {
        static void Main(string[] args) {
            Dog labrador = new Dog();
            labrador.name = "Rohu";
            labrador.Display();
            labrador.GetName();
            Console.ReadLine();
        }
    }
}

输出

I am an animal
My name is Rohu

Dog 继承了 Animal 的 name 字段和 Display() 方法。派生类也可添加自身成员如 GetName()。


"is-a" 关系

继承体现 "is-a" 关系。当一类逻辑上是另一类的特化形式时使用。

这些关系证明从 Animal 派生 Dog、从 Fruit 派生 Apple、从 Vehicle 派生 Car 的合理性。


继承中的 protected 成员

protected 字段或方法在自身类及所有派生类中可访问,对外部代码隐藏。

示例:使用受保护方法

using System;
namespace Inheritance {
    class Animal {
        protected void Eat() {
            Console.WriteLine("I can eat");
        }
    }
    class Dog : Animal {
        static void Main(string[] args) {
            Dog labrador = new Dog();
            labrador.Eat();
            Console.ReadLine();
        }
    }
}

输出

I can eat

Eat() 为 protected,Dog 可调用,但层级外代码不可访问。


继承类型

继承呈现多种模式:

1. 单继承

单个派生类继承自一个基类。

掌握 C# 继承:概念、类型与实战代码完全指南

2. 多级继承

继承链:类继承基类,另一类再继承该派生类。

掌握 C# 继承:概念、类型与实战代码完全指南

3. 层次继承

多个派生类共享同一基类。

掌握 C# 继承:概念、类型与实战代码完全指南

4. 多重继承

C# 不支持多重类继承,但接口提供灵活替代方案实现类似行为。

掌握 C# 继承:概念、类型与实战代码完全指南

5. 混合继承

两种或以上继承类型组合,如多级加层次。

掌握 C# 继承:概念、类型与实战代码完全指南

方法重写

派生类声明与基类 virtual 方法同签名的方法,并用 override 重写,实现多态行为。

using System;
namespace Inheritance {
    class Animal {
        public virtual void Eat() {
            Console.WriteLine("I eat food");
        }
    }
    class Dog : Animal {
        public override void Eat() {
            Console.WriteLine("I eat dog food");
        }
    }
    class Program {
        static void Main(string[] args) {
            Dog labrador = new Dog();
            labrador.Eat();
        }
    }
}

输出

I eat dog food

Dog 中的 Eat() 重写了 Animal 的实现。virtual 允许重写,override 标识替换。


使用 base 关键字

重写方法中需调用基类实现时,用 base 关键字。

示例:调用基类方法

using System;
namespace Inheritance {
    class Animal {
        public virtual void Eat() {
            Console.WriteLine("Animals eat food.");
        }
    }
    class Dog : Animal {
        public override void Eat() {
            base.Eat();
            Console.WriteLine("Dogs eat dog food.");
        }
    }
    class Program {
        static void Main(string[] args) {
            Dog labrador = new Dog();
            labrador.Eat();
        }
    }
}

输出

Animals eat food.
Dogs eat dog food.

base.Eat() 先调用 Animal 实现,再执行派生类逻辑。


为什么 C# 继承很重要

继承让相关类复用逻辑。例如几何形状周长计算共享公式。

  1. 创建 RegularPolygon 基类含 CalculatePerimeter() 方法。
  2. 派生 Square 和 Rectangle,添加 Length、Sides 等特有属性。
  3. 各派生类实现各自面积计算,复用周长逻辑。

演示示例

using System;
namespace Inheritance {
    class RegularPolygon {
        public void CalculatePerimeter(int length, int sides) {
            int result = length * sides;
            Console.WriteLine("Perimeter: " + result);
        }
    }
    class Square : RegularPolygon {
        public int Length = 200;
        public int Sides = 4;
        public void CalculateArea() {
            int area = Length * Length;
            Console.WriteLine("Area of Square: " + area);
        }
    }
    class Rectangle : RegularPolygon {
        public int Length = 100;
        public int Breadth = 200;
        public int Sides = 4;
        public void CalculateArea() {
            int area = Length * Breadth;
            Console.WriteLine("Area of Rectangle: " + area);
        }
    }
    class Program {
        static void Main(string[] args) {
            Square s1 = new Square();
            s1.CalculateArea();
            s1.CalculatePerimeter(s1.Length, s1.Sides);
            Rectangle t1 = new Rectangle();
            t1.CalculateArea();
            t1.CalculatePerimeter(t1.Length, t1.Sides);
        }
    }
}

输出

Area of Square: 40000
Perimeter: 800
Area of Rectangle: 20000
Perimeter: 400

此模式展示继承如何减少重复、增强可维护性。

C语言

  1. C# 类与对象:面向对象编程的基石
  2. 理解 C# 访问修饰符:public、private、protected、internal 等完全指南
  3. C# static 关键字:静态变量、方法与类完全掌握
  4. 掌握 C# 抽象类与抽象方法:实战指南
  5. 理解 C# 嵌套类:定义、访问与继承实战
  6. 理解 C# 分部类与分部方法
  7. 掌握 C# sealed 类与方法:用法、示例与代码安全性能提升
  8. C++多态实战指南:虚函数、动态绑定与纯虚函数
  9. C++数据抽象实战:接口与实现分离的设计艺术
  10. C# 程序结构解析:从 Hello World 看命名空间、类、Main 入口与编译运行
  11. C# 基础语法与面向对象核心:类、成员、实例化、标识符与关键字
  12. C# 封装详解:访问修饰符与面向对象设计最佳实践