[TOC]

  • 类的概述

  • 声明类

  • 类成员

  • 创建变量和类的实例

  • 为数据分配内存

  • 实例成员和静态成员

  • 访问修饰符

  • 从类的内部访问成员

  • 从类的外部访问成员

应用

Why?声明、使用、有哪些元素、

why?

为什么是类?

首先问问自己我们要的是什么?

  • 一个组织代码的形式
  • 可复用性
  • 包括一些方法和属性,这些方法可以是公用的,也可以是隔离的

So,

CLASS

“在面向对象的分析和设计产生之前,程序员们仅把程序当作指令的序列。那时的焦点主要放
在指令的组合和优化上。随着面向对象的出现,焦点从优化指令转移到组织程序的数据和功能上
来。程序的数据和功能被组织为逻辑上相关的数据项和函数的封装集合,并被称为类。”

“类是逻辑相关的数据和函数的封装,通常代表真实世界中或概念上的事物。”

类的组成

属性是用来描述真实世界的特性;函数是用来模拟真实世界的功能和操作。

举例说明

狼人杀里有女巫的角色,女巫手里有一瓶毒药和一瓶解药,这个药就是女巫的特性。女巫可以用来 *人和救人,这个 *人/救人的操作,是真实世界里女巫的操作。所以我们如果要实现女巫这个类的话。应该这样去做。

1
2
3
4
5
6
7
class Witch // 声明类
{
public int saveDrug; // 属性-解药
public int dangerDrug; // 属性-毒药
public void savePerson() {}; // 方法-救人
public void killPerson() {}; // 方法-*人
}

类的声明

如女巫这个类所示,通过 class 关键字用来声明一个类。类的组成成员会放在一对花括号**{** 里。

女巫的类里存在两个属性:一个是毒药一个是解药。

女巫的类里有两个方法:*人和救人。

可以看到,方法的声明需要加上 () {} ,这个是方法的特质,代表着接受执行

实例

类本身代表着模板,镜像之类的概念。一般要使用的话,使用的是类的实例。

1
2
3
4
5
6
7
8
9
class Witch {...}
class Program
{

static void Main()
{
Witch theWitch;
}
}

分配内存

image-20220803235731024

image-20220803235309970

1
2
3
4
5
6
7
8
9
10
class Witch {...}
class Program
{

static void Main()
{
Witch theWitch; // 声明一个变量
theWitch = new Witch(); // 创建一个Witch的实例
}
}

从图中可以看到,声明一个变量其实是在栈里存放了一个地址,这个地址是用来指向堆里的地址的。

实例成员和静态成员

class 里的成员是区分实例成员还是静态成员的。顾名而知,实例成员,是生成实例之后产生的。静态成员则不一致,是跟随在 声明的类 上。

可能有人有疑问了,如果不是实例成员是不是就没有隔离?答案是的。静态成员的原则就是不跟随实例,不用实例化也能使用这个类的成员

访问修饰符

在声明类的成员时,会用诸如例如 public private 的字段。这个是控制了访问等级,决定了在什么情形下,能访问到什么成员。例如 private (私有成员),只能实例内部访问,而不能被外界访问到。

私有访问是默认的访问级别,所以,如果一个成员在声明时不带访问修饰符,那它就是
私有成员。

应用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;


class DaysTemp
{
public int High, Low;
public int Average()
{
return (High + Low) / 2;
}
}

class Program {
static void Main(string[] args) {
Console.WriteLine("Hello, world!");
DaysTemp t1 = new DaysTemp();
DaysTemp t2 = new DaysTemp();
t1.High = 12;
t1.Low = 2;
Console.WriteLine("High: {0} and Low: {1} area is {2}",t1.High, t1.Low, t1.Average());
}
}
// output
// Hello, world!
// High: 12 and Low: 2 area is 7