C# & Unity 面向对象补全计划 之 继承(字段与属性)

本文仅作学习笔记与交流,不作任何商业用途,作者能力有限,如有不足还请斧正

本系列旨在通过补全学习之后,给出任意类图都能实现并做到逻辑上严丝合缝

Q:为什么要单讲继承字段与属性,不讲继承方法了吗???

A:因为继承方法离不开多态,多态相对于继承又是新的内容,容易混淆概念

1.继承的介绍

在 C# 中,继承是面向对象编程的一个重要概念。它允许一个类(子类)从另一个类(父类)继承属性和方法,从而实现代码的重用和扩展

大大大前提是,你需要让父类和子类在同一命名空间,就比如:

2 继承字段

首先,对于继承的字段等可以采用protected修饰符保证访问权限和安全性

C# & Unity 面向对象补全计划 之 访问修饰符-CSDN博客

其次,继承而来的字段可以在子类的构造函数,方法等中使用

除非是静态字段,不然无法给子类的字段赋值,别犯傻

使用栗子:

比如我现在有一个房子类,其有两个字段:标准地基长度,标准地基宽度

商业住房和住宅住房基于房子的标准地基长款进行修改

房子类:

cs 复制代码
class Houes {
    protected int baseSubgradeLength;
    protected int baseSubgradeWeigth;
    public Houes() {

        baseSubgradeLength = 100;
        baseSubgradeWeigth = 100;
    }

}

住宅和商业地基的继承与修改

cs 复制代码
Dwelling dwelling = new Dwelling(); 
Commerce commerce =new Commerce();

class Houes {
    protected int baseSubgradeLength;
    protected int baseSubgradeWeigth;
    public Houes() {

        baseSubgradeLength = 100;
        baseSubgradeWeigth = 100;
    }

}
class Dwelling : Houes {

    public Dwelling() {
        Console.WriteLine("{0}{1}", baseSubgradeLength += 50, baseSubgradeWeigth += 50);


    }

}
class Commerce : Houes {

    public Commerce() {

        Console.WriteLine("{0}{1}", baseSubgradeLength += 100, baseSubgradeWeigth += 100);
    }
}

3.继承属性

现在,为了房子地基的字段更加安全,有关部门设置为私有变量,只给出属性接口去修改

商业类和住宅类还是想修改地基长宽,应该怎么办?

cs 复制代码
class Houes {
    private int baseSubgradeLength;
    private int baseSubgradeWeigth;
    public Houes() {

        baseSubgradeLength = 100;
        baseSubgradeWeigth = 100;
    }
    protected int SubgradeL
        { 
    get => baseSubgradeLength; 
    set => baseSubgradeLength = value;
  
    }
    protected int SubgradeWeigth
        { 
    get=> baseSubgradeWeigth; 
    set => baseSubgradeWeigth = value;
    }

}

还是像字段一样,在构造函数里直接通过继承来的属性访问器修改就行了

cs 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

Dwelling dwelling = new Dwelling(); 
dwelling.
Commerce commerce =new Commerce();

class Houes {
    private int baseSubgradeLength;
    private int baseSubgradeWeigth;
    public Houes() {

        baseSubgradeLength = 100;
        baseSubgradeWeigth = 100;
    }
    protected int SubgradeL
        { 
    get => baseSubgradeLength; 
    set => baseSubgradeLength = value;
  
    }
    protected int SubgradeWeigth
        { 
    get=> baseSubgradeWeigth; 
    set => baseSubgradeWeigth = value;
    }

}
class Dwelling : Houes {

    
    public Dwelling() {
      
        Console.WriteLine("{0}{1}", SubgradeL += 50, SubgradeWeigth += 50);
    }

}
class Commerce : Houes {

    public Commerce() {


        Console.WriteLine("{0}{1}", SubgradeL  += 100, SubgradeWeigth += 100);
    }
}

好了,现在字段和属性部分你驾轻就熟了,下一篇文章就是关于继承方法了

相关推荐
Java面试题总结12 分钟前
Python 开发技巧 · 高级装饰器 —— 从基础到工业级实战
开发语言·python
吴可可12315 分钟前
C# CAD自定义图元优化切割路径
c#
三品吉他手会点灯1 小时前
嵌入式机器学习 - 学习笔记1.0.1 - 从 Alexa 到 TinyML:为什么机器学习开始跑进微控制器?
人工智能·笔记·嵌入式硬件·学习·机器学习
liulilittle1 小时前
Exhaustive drift-fix simulation V2 — KCC on shared-bottleneck wired path.
开发语言·网络·python·tcp/ip·计算机网络·信息与通信·通信
YigAin1 小时前
Unity Spine 资源出现白边的解决办法
unity·游戏引擎·spine
名字还没想好☜2 小时前
Go error 处理:errors.Is/As 与错误包装
开发语言·后端·golang·go·错误处理
红糖奶茶2 小时前
Python 中 while 循环计数异常的常见原因分析与正确搓搓
开发语言·python
进击的小头2 小时前
第16篇:Buck-Boost 升降压电路:核心原理、参数计算与典型应用场景全讲解
经验分享·学习·数学建模
Lucky_Turtle2 小时前
【论文写作】PDF图片不清晰,打印生成PDF空白大,PDF字体嵌入
开发语言·pdf·c#
csdndenglu2 小时前
Easy3D:一个轻量级、易用、高效的C++库,用于处理和渲染3D数据,无复杂要求时可替代VTK
开发语言·c++·图形渲染·3d渲染