C# 面向对象编程(二)——继承

简介: C# 面向对象编程(二)——继承

简介

  主要记录的是继承的相关注意事项

正文

继承

继承只能继承自唯一一个类,但是可以被多个类继承。

//基类
internal class Animal
{
   
    protected string? name;
    protected int age;

    public void Eat()
    {
   

    }

    public void Sleep()
    {
   

    }

    public override string ToString()
    {
   
        return name + ","+ age;
    }
}
//继承自基类
internal class Dog:Animal
{
   
    public Dog()
    {
   
        name = "gaofei";
        age = 18;
    }
}
//继承自基类
internal class Cat:Animal
{
   
    public Cat()
    {
   
        name = "jiafei";
        age = 25;
    }
}

static void Main(string[] args)
{
   
    Dog dog = new Dog();
    Console.WriteLine(dog.ToString());
    Cat cat = new Cat();
    Console.WriteLine(cat.ToString());
}

//输出
gaofei,18
jiafei,25

向上向下转型

就是基类转子类,子类转基类,略。

as 运算符

as 运算符在 向下类型转换出错时返回 null (而不是抛出异常)

Animal ani = new Animal();
Dog dog = ani as Dog;        //ani is null ,但是不会抛出异常
is 运算符

通常在向下类型转换前使用,判断这个类型是否符合条件,略。

static void Main(string[] args)
{
   
    Animal ani = new Animal();
    Dog dog = new Dog();
    if (ani is Dog d)
    {
   
        d = (Dog)ani;
        Console.WriteLine(d.ToString());
    }

}

1. 虚函数和抽象函数 及抽象类

虚函数为标识为 virtual 的函数,方法、属性、索引器和事件都可以声明为 virtual。

虚函数可以有函数实现,可能被子类重写。

抽象函数只能存在抽象类中,用 abstract 标识。

抽象类不能被实例化,抽象函数也不能写方法实现,需要子类去实现,如果子类不实现,那么子类必须是抽象方法,让继承它的类去实现。

父类普通函数,父类普通函数无法被重写,只能使用 new 关键字被隐藏,只有虚函数才允许被重写。

2. 隐藏父类成员

继承类中添加一个和父类中一个的成员时,叫做隐藏父类成员,如果是有意隐藏,需要添加new 关键字,否则会有一个警告的提示。

class Animal{
    protected int age;}
class Cat:Animal{
    private new int age;}

隐藏和override重写不一样,当子类向上转型的时候:

  • 如果是隐藏方法,那么向上转型后输出的是父类方法
  • 如果是重写方法,那么向上转型后输出的还是重写的方法

3.密封函数

密封函数就是在 override 重写函数前面添加 sealed 关键字,作用是防止该重写方法被这个重写函数的子类再去重写。

注意 :只有重写函数 才能被密封

public sealed override void Run(){
   }

base关键字

base用于访问父类方法和属性,this用于访问自己类的方法和属性

4. 构造器继承

子类无法直接继承父类的构造器,必须自己显示声明自己的构造器。

或者间接的调用父类构造方法。

public class BaseClass{
   
    public int X;
    public BaseClass(){
   }
    public BaseClass(int x){
   this.X =x;}
}
public class SubClass : BaseClass{
   
    public SubClass(int x):base(x){
   }
}

重载与重写

重载是相同名字的方法,参数的个数或者参数类型不同,则为重载方法。

重写是子类继承父类时,可以去重写父类的虚函数。

抽象函数那个不叫重写,叫做实现,因为抽象函数并没有实现,需要子类去实现,所以叫实现而不是重写。

目录
相关文章
|
6月前
|
Java C#
C# 面向对象编程解析:优势、类和对象、类成员详解
OOP代表面向对象编程。 过程式编程涉及编写执行数据操作的过程或方法,而面向对象编程涉及创建包含数据和方法的对象。 面向对象编程相对于过程式编程具有几个优势: OOP执行速度更快,更容易执行 OOP为程序提供了清晰的结构 OOP有助于保持C#代码DRY("不要重复自己"),并使代码更易于维护、修改和调试 OOP使得能够创建完全可重用的应用程序,编写更少的代码并减少开发时间 提示:"不要重复自己"(DRY)原则是有关减少代码重复的原则。应该提取出应用程序中常见的代码,并将其放置在单一位置并重复使用,而不是重复编写。
73 0
|
1月前
|
编译器 C#
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
116 65
|
2月前
|
安全 C#
C# 面向对象编程的三大支柱:封装、继承与多态
【9月更文挑战第17天】在C#中,面向对象编程的三大支柱——封装、继承与多态,对于编写安全、可维护、可复用的代码至关重要。封装通过访问修饰符和属性保护数据;继承允许子类继承父类的属性和方法,实现代码复用和多态;多态则提高了代码的灵活性和通用性。掌握这三大概念能显著提升C#编程能力,优化开发效率和代码质量。
|
2月前
|
存储 C#
C# 一分钟浅谈:继承与多态性的实践
【9月更文挑战第2天】本文从基础入手,详细介绍了面向对象编程中继承与多态性的核心概念。通过 `Animal`、`Dog` 和 `Cat` 类的示例代码,展示了如何利用继承重用代码及多态性实现不同对象对同一方法的多样化响应,帮助读者更好地理解和应用这两个重要概念,提升面向对象编程能力。
43 3
|
3月前
|
C#
C#中的类和继承
C#中的类和继承
43 6
|
3月前
|
C#
C# 面向对象编程(三)——接口/枚举类型/泛型
C# 面向对象编程(三)——接口/枚举类型/泛型
32 0
|
3月前
|
Java C# 索引
C# 面向对象编程(一)——类
C# 面向对象编程(一)——类
34 0
|
6月前
|
程序员 C#
C#编程中的面向对象编程思想
【4月更文挑战第21天】本文探讨了C#中的面向对象编程,包括类、对象、封装、继承和多态。类是对象的抽象,定义属性和行为;对象是类的实例。封装隐藏内部细节,只暴露必要接口。继承允许类复用和扩展属性与行为,而多态使不同类的对象能通过相同接口调用方法。C#通过访问修饰符实现封装,使用虚方法和抽象方法实现多态。理解并应用这些概念,能提升代码的清晰度和可扩展性,助你成为更好的C#程序员。
91 4
|
6月前
|
C#
C# 继承、多态性、抽象和接口详解:从入门到精通
在 C# 中,可以将字段和方法从一个类继承到另一个类。我们将“继承概念”分为两类: 派生类(子类) - 从另一个类继承的类 基类(父类) - 被继承的类 要从一个类继承,使用 : 符号。 在以下示例中,Car 类(子类)继承了 Vehicle 类(父类)的字段和方法:
104 2
|
6月前
|
程序员 C#
C# 面向对象编程进阶:构造函数详解与访问修饰符应用
构造函数是一种特殊的方法,用于初始化对象。构造函数的优势在于,在创建类的对象时调用它。它可以用于为字段设置初始值
69 1