知识点

面向对象包含了两个很重要的东西——属性、方法

  • 属性:这个对象有什么特征。如:颜色、重量、位置……
  • 方法:这个对象能干嘛。如:上色、掉落……

属性

这个对象有什么特征。比如人有姓名、年龄、性别等。

格式为(方括号代表可以写、可以不写):

[修饰符] [static] 数据类型 变量名 [= 初始值];
  • 修饰符分为五个
    • public——公共的,所有类都能调用它的值。
    • private——私有的,相当于他的小秘密,只有他自己可以访问这个值
    • protected——受保护的,只有它和它的孩子(继承它的)类可以访问这个值
    • internal——同一个项目中的对象可以访问
    • protected internal——可可以在其他项目中,被派生类使用
    • 不写——相当于 private,只有他自己能访问
  • static 关键字将此变量设置为静态变量。它的特性是:
    • 一旦这个类(不是实例化之后的对象)被初始化之后,它的值就一直存在
  • 数据类型可以是任何种类,包括复合类
  • 变量名——一般情况下,C#变量名的命名方式约定俗成为:
    • private 修饰符,它的变量名之前应该有个下划线,然后采用小驼峰。如:_chineseName
    • public 修饰符,采用大驼峰。如:ChineseName
    • 变量名不能和类名重名。
  • 初值。我们可以给属性设置初始值

构造函数

在创建对象的时候,告诉它一些初始值。比如说我告诉 Person 类,你的名字是啥、年龄是啥。
一旦声明了构造函数,无参构造函数将不复存在

无参构造函数——如果没有声明构造函数,那么系统默认会给一个隐形的无参构造函数。

public 类名()
{
}

固定写法

public 类名 (数据类型 参数1, 数据类型 参数2)
{
属性1 = 参数1; // 和 C语言 一样,右边的值赋值给左边的变量
属性2 = 参数2;
}

构造函数的用法是

类名 变量名 = new 类名(值1, 值2);

Getter 和 Setter

有些属性,我们要给他规定合法值,或者一些其他的操作。那么就可以用到 Getter 和 Setter。他俩分别在赋值和获取值的时候执行。

一个完整的、最基础的属性应该长这样:

private 数据类型 _变量名; // 注意这里是 private 修饰符,所以带 _,命名方式为小驼峰

public 数据类型 变量名 // 数据类型要和上面的一样。public 变量的命名方式为大驼峰。
{
get { return _变量名; } // 这里返回的是 private 的那个变量
set { _变量名 = value; } // 讲我们给予的值赋值给 _变量
}
  • get 是取值
  • set 是赋值
    • value 是我们赋值的那个“值”。他是个隐含变量。假设 p1.Name = "李四",那么set 里面的 value 就等于 "李四"

举个栗子:

private string _name;

public string Name
{
get
{
// 有时候 _name 可能是空的
if (_name != null)
{
return _name;
}
else
{
return "张三";
}
}

set
{
_name = value;

// 我们给它赋值之后,可以调用某个方法让它执行某些操作,如自报家门。
Introduce();
// 直接写代码
Console.WriteLine($"我叫{Name}");
}
}

方法

我们可以给对象设定一些它的“动作”。比如说人类可以开车、吃饭、睡觉。

一个基本的方法定义为:

[修饰符] [static] 返回值类型 方法名([参数1, 参数2])
{
// 和我们一般定义的函数是一样的道理
// 代码块
}
  • 方法名的命名方式一定是大驼峰

static 关键字

如果有 static 关键字修饰的属性或方法,说明他是静态的。这类属性和方法可以直接通过 类名.属性名/方法名() 直接调用。不需要实例化对象。具有 static 关键字的属性是全局性的,也就是说我们在 A 类里调用 Person.Age += 1;,那么在 B 类里访问 Person.Age 也是加一之后的值。

public class World // 世界类
{
public static string Age = "46billion"; // 这个世界多少岁了
public static int Population = 70; // 人口

// 世界毁灭
public static void Destroy()
{
// 代码块
}
}

public class Program
{
public static void Main(string[] args)
{
Console.WriteLine(World.Age); // 46billion
World.Destroy();
World.Population++;
}
}

public class SecondProgram
{
public static void SecondMethod()
{
Console.WriteLine(World.Population); // 71
}
}

懒人方法

  • ctor 回车,TAB。创建构造函数
  • cw 回车,TAB。Console.WriteLine() 的懒人方法
  • propfull 回车,TAB。创建一个带有 getter 和 setter 的属性