新手在学写程序时一定常常看到物件、类别、介面、抽象、继承...奇怪的外星语,可能知道跟物件导向有关但又常常搞不清楚,毕竟程序就是一行一行执行下来,写起来很直觉,也很好懂,但多了这些东西程序感觉就变得很复杂,想搞懂却看文章看到头晕脑胀。没关系!这篇花一点点的时间说明,希望能对新手的学习有帮助。
首先,我们写程序大部分都是写在Class里面,也就是类别,那类别跟物件有什麽关系?
物件(Object)就是类别(Class)的实体,类别(Class)就是物件(Object)的定义
听不懂对吧?翻成白话文你或许就可以懂了
当你写完的类别没有被执行起来时,他只是一个文字档,但当你的程序Build完要Run起来时,电脑会分配一些RAM的空间来执行你的程序,而当程序执行到你写的类别时,他会去分配一些RAM的空间来给这个类别,这就是实体化,所以没实体化以前,类别只是一些定义了物件实体化後要有哪些特徵的文字而已。以骇客任务(The Matrix)这电影来说,当你写了一个Gun类别,再把母体的世界当成一个RAM里面的空间,你就可以透过实体化这类别而得到一把枪(或是很多把枪),因此反抗军再送救援物资给Neo时,其实只是把救援物资的类别丢到母体的执行绪里面实体化而已。
这题面试常常考,以前不懂时都是硬背答案,但我觉得现在懂了或许该用我自己的理解分享给新手,让新手在面试时不要再用硬背答案的方式了
public double HeartBeat { get; private set; }
上方的心跳速率这个属性是公开(public)的,大家都能取值(get方法),但要设定这值等於多少并不开放给外部(private set方法),其中要决定心跳速率要有多快可能是一个private的方法来决定,因此可能还会需要一断类似这样的Code
private void SetHeartBeatValue()
{
//TODO:运算心跳的逻辑
HeartBeat = 60;
}
public class Car
{
public int Speed { get; set; }
public virtual void AddSpeed()
{
Speed += 1;
}
public virtual void TurnLeft()
{
//TODO:左转的逻辑
}
public virtual void TurnRight()
{
//TODO:右转的逻辑
}
}
public class Tesla : Car
{
}
其中子类别特斯拉继承了Car类别,因此他不用再写加速、左转、右转的方法,别的地方实体化Tesla时,就会有这些方法能用了,例如
var tesla = new Tesla();
tesla.AddSpeed();
tesla.TurnLeft();
tesla.TurnRight();
而子类别继承了父类别的特性要修改的话也能做到,例如我希望另一个类别法拉利的加速要快一点,我可以这样
public class Ferrari : Car
{
public override void AddSpeed()
{
base.Speed += 3;
}
}
关於C#的修饰词,例如上面出现的public、private、virtual、override等等,本篇就不介绍了,请新手去看看其他铁人赛有介绍C#的文章吧。
下一篇继续介绍没讲完的多型~
<<: [Day9] Reactstrap = Bootstrap in React,你看离 React 越来越近了吧
上一篇漏掉了一个主类别的函数: void anotherInstanceStarted (const...
这里我们先看一张图,大概了解一下 Git 在发布专案时的流程。 先有个概念,之後会逐一详细解释。 开...
Keyword: Dependency Injection 到Day20 使用Koin管理依赖注入显...
回圈 for 回圈 for 回圈,很适合用来处理数值会依照次数,有「递增」或「递减」的变化 范例如下...
前言 前一天结束在点选某个搜寻到的使用者,今天接着做跟该使用者展开对话吧! New Conversa...