我正在阅读《Head First C#》(它非常有趣和用户友好),但我想知道是否有任何有用的比喻来描述命名空间、类、方法、属性等如何“相互配合”?
类是父类,方法是子类等等,还是更加复杂?
可以把名称空间看作房子,把类看作房间(卫生间),方法是在房间里所能做的事情(洗漱等),属性是在进行该活动时能够做的事情,如使用肥皂,热水……
......我要拿我的外套了。
我正在阅读《Head First C#》(它非常有趣和用户友好),但我想知道是否有任何有用的比喻来描述命名空间、类、方法、属性等如何“相互配合”?
类是父类,方法是子类等等,还是更加复杂?
可以把名称空间看作房子,把类看作房间(卫生间),方法是在房间里所能做的事情(洗漱等),属性是在进行该活动时能够做的事情,如使用肥皂,热水……
......我要拿我的外套了。
我会这么说:
命名空间:汽车的类别或品牌。注意,品牌并不一定决定汽车如何建造。你不能说本田总是有四个门,或者它总是有四轮驱动。这样的细节由类来规定。Rich.Carpenter的帖子很好地解释了命名空间的目的。
类:构建特定汽车的蓝图。
对象:从汽车蓝图(即类)创建的实际汽车(实例)。
方法:用户可以让汽车执行的操作。例如:Start()
,IncreaseThrottle()
,Brake()
,OpenDoor()
等。
属性:汽车包含的属性、信息和构建块。例如:总行驶里程、颜色、方向盘尺寸、音响系统等等。
下面是可能对您来说更高级的概念。也许现在对您来说有点过头了,但如果您感兴趣,可以阅读:
继承:当一个类基于另一个类并添加了一些更具体的细节时。继承关系通常从最常见和普遍的方面开始,一直到达到不再更具体的点。例如,在动物的语境下,这个关系可以是:Animal->Mamal->Rodent->Rat->RattusNorvegicus
聚合:构建对象的属性。例如:"这辆车由四个轮子、底盘、发动机等组成"。
属性: 描述对象的特性,通常不是其物理结构的一部分。例如颜色、最高速度、引擎容量等。
封装: 将某些属性隐藏或保护其免受错误使用(从而损坏对象)。例如,您不会自由地公开汽车类的齿轮属性。您需要对其进行封装,并确保在调用SetGear()
之前调用Clutch()
。
重写: 如果一个类继承另一个类,则它也会继承该类的方法。重写是指继承类用其自己所需的行为替换此类方法的实现。下一点中使用示例。
多态: 在开始实际使用之前,很难掌握的概念。它意味着通过使用通用引用来引用一种非常具体的对象,从而使您可以忽略特定类型(当您不需要知道它时)。例如,如果您想要"读取"停车场中每辆车的车牌号码属性,则您并不真正关心品牌,甚至不知道它是拖车、摩托车还是其他什么车辆。为了能够这样做,我们确保车牌号是继承线中最普遍的类(可能是Vehicle
类)中的属性。因此,您只需通过将它们作为Vehicle
类引用来处理列表中的所有对象,然后调用Vehicle::GetLicensePlateNumber()
。任何需要特殊处理以检索号码的车辆都可以通过重写方法并使其以所需方式运行来实现此行为。因此,广泛范围的对象类型可以像相同类型的对象一样使用,但可以表现出不同的行为。
把类看作对象的描述,方法看作这些对象可以执行的操作。
例如,我设计了一辆新车。用于创建实际物理车辆(对象)的是该车的计划或蓝图(类)。这些计划表明,汽车应具有功能性的喇叭。因此,我在车里设计了鸣笛功能(一个方法)。这些计划还表明,车子必须有四个轮子。轮子将成为车子的属性,并被实例化(在创建对象时分配给该属性)为4。颜色可能是另一个属性。属性描述对象的质量或特征(颜色、高度、宽度等)。
现在,我在丰田工作(并非真的,但请忍耐)。丰田将包括我的汽车蓝图的命名空间。由于福特、通用等公司也可以拥有自己的汽车设计(类)以及完全相同的名称(car)和方法(honk),所以丰田、福特和通用的命名空间将保持这些蓝图(类)的独特性和区别,因此在应用程序中可以有多个具有相同名称的类和方法,当它们具有不同的命名空间时。
希望这能有所帮助。
通过使用房屋蓝图的比喻。
蓝图是一个类。它指定了许多细节,但也留下了很多属性,例如房子的颜色、前门的颜色和样式等。你可以通过检查蓝图知道门会在哪里,而且会有一扇门。
对象是你从那个蓝图建造的房子。你可以从同一蓝图建造许多房子。它们都具有相同的外观和布局,但属性可能会有所不同,例如外部油漆的颜色、前门的样式等。然而,所有房子的前门位置都相同。
你可以将每个房子称为从特定蓝图中生成的房子实例。
因此,正如@yx所说,对象是类的实例。
类通常用于表示某种对象。它可能类似于发票这样的物理对象,但也可能是更抽象的东西。
有时会使用动物作为类的示例,因为我们熟悉动物的工作方式。所以,让我们用一些动物来举例:
类可以是某种动物,比如Cat
和Dog
。当您创建类的一个实例时,它就变成了一个特定的对象,比如Fido the dog。
命名空间用于逻辑上分组类,因此Cat
和Dog
类可以放置在命名空间Animals.Pets
中。虽然命名空间是分层的,但这并不意味着其中的类是分层的。它们只是不同的组,因此Animals
命名空间中的类不自动成为Animals.Pets
命名空间中的类的父级。
方法是对象执行的操作,例如Eat()
和Sleep()
。
属性是描述对象某个方面的内容,例如NumberOfLegs
和IsSleeping
。
类是一种对象类型。例如,您可以拥有任意数量的同一类对象。
实例是一个对象,有时这两个术语可以互换使用,因为在许多编程语言中,所有对象也都是类的实例。人们使用“实例”一词来明确表示他们不是在谈论类,而是该类的一个对象。