C#类和对象

方法

方法即函数,实现某种功能的东西。

访问修饰符 访问类型 方法名称 参数列表
{
  //代码块
}
public static void Happen()
{
  Console.WriteLine("happen to do something");
}

访问修饰符(可选):代表所有类型或类型成员拥有的可以被访问的级别。
返回类型:方法返回值的数据值类型,不返回值则类型为void。方法结束时直接写一个return 即可。
方法名称:方法名称可以重复(并且区分大小写),但同一个 类或者结构中的方法名不可重复,它是唯一的标识。不要与别的标识重复,命名名称时应尽量有意义,使用PascalCase命名法。
参数列表:调用方法需要传入的参数。参数名使用大驼峰命名法。可设置可选参数和命名参数具体决定自己传入什么,在不传入的时候默认是什么,是否要加上对应的后缀。

只有声明的方法才会被调用。

方法的重载是指:方法名相同,但是参数的个数和类型不同。方法的重载与返回值无关,与参数的个数和类型有关。
仅方法名相同参数列表相同,但返回值类型不同的方法不能构成重载。
【类中的构造函数也可以实现重载】

对象

对象有属性(也可称为字段)和方法,这些字段/属性/方法统称为类的成员。

类是具有相似属性和方法的对象的集合(是用于创建相同类型的对象的模板)。类是对象的抽象。
类的成员分类:成员分类:字段 属性 方法 索引 委托 事件 嵌套类

要将类实例化成一个实例对象,需要使用关键字new。
(常看参考链接进行回忆)

构造函数和析构函数

用于解决变量初始化和清楚时可能出现的问题:忘记对象的初始化和清除。
把对象成员的初始化工作放在构造函数中,把清除工作放在析构函数中。
创建对象时,自动执行构造函数。对象生命周期结束时,自动执行析构函数。

在C#中,每当实例化类或结构时,都会调用构造函数设置默认值、限制实例化。一个类或结构可能有多个接受不同参数的构造函数。

构造函数是一种方法,其名称与其所在类的名称相同。该方法仅包含名字和参数列表,不包含返回类型。 实际构造实例时,会根据传入的不同参数选择不用的构造函数。【可以有多个重载】
如果一个类没有显式创建构造函数,则编译器会为此类创建一个默认的构造函数。

析构函数

析构函数是类的一个特殊函数,当其类的对象超出作用域时就会执行该函数。析构函数的名称与带前缀~的类的名称完全相同,既不能返回值,也不能接受任何参数。

class MyClass
{
  ~ MyClass()
  {
  }
}

析构函数是实现销毁一个类的实例的方法成员,该函数不能有参数,不能有任何修饰符且不能被调用。
一般在程序结束时执行,一般时候析构函数里写的都是一些资源回收的东西。但C#中的析构函数不能保证每次都调用,所以最好不要用C#的析构函数来回收资源。

this 关键字

在c#中,this关键字通常表示当前引用类型的实例,也可将其作为参数传递。
注:this关键字表示当前引用类型的实例,所以不能再static修饰的静态方法/属性或者静态类中使用。注意要小写哦!

当一个实例的方法参数名与属性名称相同时,使用this关键字进行区分。[听起来有点像self]

将其作为参数传递【这一点目前还没看明白,好像是如果在一个类A中需要调用方法需要类A的实例,这时传入this】

static 关键字

该关键字属于修饰符,声明静态成员,该成员属于类型本身,而不是实例对象。可用于类、变量、方法、属性、操作符、方法以及构造函数,但不能引用于索引器、终结器以及类以外的类型。

什么是静态类?

静态类不能实例化,也就是不能使用new关键字创建静态类类型的变量。主要目的在于:防止程序员写代码来实例化该静态类,并防止在类的内部声明任何实例字段或方法。
主要特性有:

  1. 仅包含静态成员
  2. 无法实例化,不能有实例成员。
  3. 不能被继承(一个抽象的密封类)
  4. 不能包含实例构造函数
  5. 如果一个类下面所有的成员都需要被共享,可以把这个类定义为静态类。

不能从静态类派生出其它类,不可扩展!

什么是静态成员?

感觉这里写的不是很清楚,还需要多琢磨琢磨。
若在定义某个成员时使用 static 关键字,则表示该类仅存在此成员的一个实例,也就是说当我们将一个类的成员声明为静态成员时,无论创建多少个该类的对象,静态成员只会被创建一次,这个静态成员会被所有对象共享。

使用 static 定义的成员属性称为“静态属性”,静态属性可以直接通过类名.属性名的形式直接访问,不需要事先创建类的实例。静态属性不仅可以使用成员函数来初始化,还可以直接在类外进行初始化。

非静态类可以包含静态的方法、字段、属性或事件;
静态方法只能被重载,而不能被重写,因为静态方法不属于类的实例成员;

成员需要被共享的时候,方法需要被反复调用的时候,就可以把这些成员定义为静态成员。
在静态方法中,不能直接调用实例成员,因为静态方法被调用的时候,对象还有可能不存在。
this/base 关键字在静态方法中不能使用,因为有可能对象还不存在。
在实例方法中,可以调用静态成员,因为这个时候静态成员肯定存在。
虽然字段不能声明为 static const,但 const 字段的行为在本质上是静态的。这样的字段属于类,不属于类的实例。

静态方法

是不属于特定对象的方法,不可以直接访问实例成员,可以在实例函数调用的情况下,实例成员做为参数传给静态方法。
不能直接调用实例方法,可以间接调用,首先要创建一个类的实例,然后通过这一特定对象来调用静态方法。
可以访问静态成员。

静态构造函数

静态类可以有静态构造函数,不可继承
静态构造函数可以用于静态类,也可用于非静态类
静态构造函数无访问修饰符、无参数,只有一个 static 标志
静态构造函数不可被直接调用,当创建类实例或引用任何静态成员之前,静态构造函数被自动执行,并且只执行一次。

在这一部分中,参考链接1讲解得不是很详细,代码也跑不通。等我弄明白这个静态之后再进行补充。

参考链接

  1. 有什么推荐的C#的学习资源嘛? - 码老头的回答 - 知乎 https://www.zhihu.com/question/520996786/answer/2382904462
  2. C#类的创建 https://blog.csdn.net/haiziguo/article/details/6736296
  3. C#静态成员
posted @ 2023-01-11 12:56  芋圆院长  阅读(121)  评论(0编辑  收藏  举报