简单复习一下 C# 基础语法(第二期)。
类
类包含字段、属性和方法,是一个抽象概念。
对象是类的一个实例。
字段和属性
字段和属性定义了对象的特征。
声明一个学生类,包含若干个字段和属性。
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 27 28 29 30
| public enum Gender { Boy, Girl }
public class Student { public string name; public Gender gender; private int age;
public int Age { get { return age; } set { if (value > 0 && value < 100) { age = value; } } } }
|
实例化一个学生对象,对字段和属性进行赋值,并打印结果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public class Program { static void Main() { Student student = new Student(); student.name = "小明"; student.gender = Gender.Boy; student.Age = 200; Console.WriteLine(student.name); Console.WriteLine(student.gender); Console.WriteLine(student.Age); } }
|
方法
方法定义了对象的行为,可以执行一系列的逻辑。
无参方法
没有参数的方法。
例如,声明一个 Say 方法,打印三个句子。
1 2 3 4 5 6 7 8 9 10 11
| public class Student {
public void Say() { Console.WriteLine("你好,我叫 " + name); Console.WriteLine("我是一个 " + gender); Console.WriteLine("我今年刚满 " + age + " 岁~~~"); } }
|
通过实例对象调用方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public class Program { static void Main() { Student student = new Student(); student.name = "喵喵球"; student.gender = Gender.Girl; student.Age = 18; student.Say(); } }
|
有参方法
有参数的方法。
例如,声明一个 Repeat 方法,有一个 string 类型的参数,方法体内会复读传入的内容。
1 2 3 4 5 6 7 8 9
| public class Student {
public void Repeat(string content) { Console.WriteLine("我再说一遍 " + content); } }
|
通过实例对象调用方法,并传入一个字符串参数。
1 2 3 4 5 6 7 8 9 10 11
| public class Program { static void Main() { Student student = new Student();
student.Repeat("我今年刚满 18 岁~~~"); } }
|
构造方法
构造方法的名称和类名相同。
当类里面没有写任何构造方法时,会有一个默认的无参构造方法。
1 2 3 4 5 6 7 8
| public class Student { public Student() {
} }
|
如果需要在实例化对象时,有一些执行逻辑,就可以显式写出构造方法。
1 2 3 4 5 6 7
| public class Student { public Student() { Console.WriteLine("一个对象被实例化了"); } }
|
1 2 3 4 5 6 7 8 9
| public class Program { static void Main() { Student student = new Student(); } }
|
也可以自定义一个有参构造方法。
当参数名和字段名相同时,为了区分是参数赋值给字段,就需要在使用字段时,加上 this。
1 2 3 4 5 6 7 8 9 10 11
| public class Student { public Student(string name, Gender gender, int age) { this.name = name; this.gender = gender; this.age = age; } }
|
此时,私有字段 age 可以被直接赋值。
1 2 3 4 5 6 7
| public class Program { static void Main() { Student student = new Student("小明", Gender.Boy, 10); } }
|
析构方法
当对象被垃圾收集器回收时,会自动调用析构方法。
析构方法也跟类名相同,前面要加个 ~ 符号。
1 2 3 4 5 6 7
| public class Student { ~Student() { Console.WriteLine("我被回收了呜呜呜~~~"); } }
|
在 Program 类声明一个静态方法 CreateStudent,方法体内实例化一个对象,当方法调用结束后,对象就没有引用了。
此时可以调用 GC.Collect 方法主动回收一次垃圾,student 对象就会调用析构方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class Program { static void Main() { CreateStudent(); GC.Collect(); } static void CreateStudent() { Student student = new Student("小明", Gender.Boy, 10); } }
|
静态方法
不用实例化对象就能调用的方法。
例如,上述的 CreateStudent 方法,前面有个修饰符 static,表示静态的,不需要 new 一个 Program 对象,就能够直接调用。
Student 类也可以声明一个静态方法。
1 2 3 4 5 6 7
| public class Student { public static void Introduce() { Console.WriteLine("我是一个学生"); } }
|
无需实例化对象,直接通过类名调用。
1 2 3 4 5 6 7 8 9
| public class Program { static void Main() { Student.Introduce(); } }
|