C# 继承

继承是面向对象编程的一个核心概念。它允许创建一个类,该类基于现有的类,并且可以重用现有类的属性和方法。通过继承,我们可以创建一个新的类,该类扩展了现有类的功能。

继承的基本概念

在C#中,当一个类从另一个类派生时,就形成了一个继承关系。被派生的类称为基类或父类,派生出的新类称为派生类或子类。子类继承了父类的所有非私有成员,包括字段、属性、方法等,并且还可以添加自己的新成员。

示例

下面是一个简单的继承示例:

-- -------------------- ---- -------
-- ------ ------
------ ----- ------
-
    ------ ---- -----
    -
        ----------------------- ------ ---- --------
    -
-

-- ------- ------- ------
------ ----- --- - ------
-
    -- --------
    ------ ---- ------
    -
        ---------------------- --- ---------
    -
-

----- -------
-
    ------ ---- ------------- -----
    -
        --- ----- - --- ------
        ------------   -- -------
        -------------  -- -------
    -
-

在这个例子中,Dog 类继承了 Animal 类。因此,Dog 实例不仅可以调用 Bark() 方法,还可以调用从 Animal 类继承来的 Eat() 方法。

构造函数与继承

在C#中,子类不能直接继承父类的构造函数,但可以通过调用 base 关键字来调用父类的构造函数。这有助于初始化继承的成员。

示例

-- -------------------- ---- -------
------ ----- ------
-
    ------ ------ ---- - ---- ---- -

    ------ ------------- -----
    -
        ---- - -----
    -
-

------ ----- --- - ------
-
    ------ ---------- ----- - ----------
    -
        -- -------------
    -
-

----- -------
-
    ------ ---- ------------- -----
    -
        --- ----- - --- -------------
        ------------------------------ -- -- -------
    -
-

在这个例子中,Dog 类的构造函数调用了 base 关键字来传递参数给父类 Animal 的构造函数。

覆盖方法

子类可以覆盖(重写)父类的方法,以便提供特定于子类的行为。这通过使用 override 关键字来实现。

示例

-- -------------------- ---- -------
------ ----- ------
-
    ------ ------- ---- -----------
    -
        ---------------------- ------ ----- - ---------
    -
-

------ ----- --- - ------
-
    ------ -------- ---- -----------
    -
        ---------------------- --- ---------
    -
-

----- -------
-
    ------ ---- ------------- -----
    -
        --- ----- - --- ------
        ------------------ -- -- ---- --- -------
    -
-

在这个例子中,MakeSound 方法在 Animal 类中被定义为虚拟方法,并在 Dog 类中被覆盖。当通过 Dog 类的对象调用 MakeSound 时,将执行 Dog 类中的版本。

封闭类和方法

有时我们可能不希望类或类的方法被继承。这时可以使用 sealed 关键字来封闭类或方法。封闭类意味着这个类不能被继承,而封闭方法意味着这个方法不能被覆盖。

示例

-- -------------------- ---- -------
------ ----- ------
-
    ------ ------- ---- -----------
    -
        ---------------------- ------ ----- - ---------
    -
-

------ ------ ----- --- - ------
-
    ------ ------ -------- ---- -----------
    -
        ---------------------- --- ---------
    -
-

----- -------
-
    ------ ---- ------------- -----
    -
        --- ----- - --- ------
        ------------------ -- -- ---- --- -------
    -
-

在这个例子中,Cat 类和 MakeSound 方法都被声明为密封,因此它们不能被进一步继承或覆盖。

多级继承

在C#中,类可以多级继承,也就是说,一个类可以从另一个类派生,而这个类又可以从第三个类派生,以此类推。

示例

-- -------------------- ---- -------
------ ----- ------
-
    ------ ---- -----
    -
        ----------------------- ------ ---- --------
    -
-

------ ----- ------ - ------
-
    ------ ---- ------
    -
        ----------------------- ------ --- --------
    -
-

------ ----- --- - ------
-
    ------ ---- ------
    -
        ---------------------- --- ---------
    -
-

----- -------
-
    ------ ---- ------------- -----
    -
        --- ----- - --- ------
        ------------   -- ----------
        -------------  -- ---------
        -------------  -- -------
    -
-

在这个例子中,Dog 类继承自 Mammal 类,而 Mammal 类又继承自 Animal 类。因此,Dog 类可以访问所有这三个类中的方法。

总结

继承是面向对象编程的重要组成部分,它允许我们创建更复杂的类结构,从而更好地组织和复用代码。通过继承,我们可以创建具有共同行为和属性的类层次结构,使得代码更加模块化和易于维护。

以上便是关于C#继承的详细介绍。接下来,我们将探讨更多关于面向对象编程的概念。

上一篇: C# 类(Class)
下一篇: C# 多态性
纠错
反馈