1. 类的概述
类是一种活动的数据结构
程序的数据和功能被组织为逻辑上相关的数据项和函数的封装集合,被称为类。
类是一个能存储数据并执行代码的数据结构。它包含数据成员和函数成员。
**数据成员:**它存储与类或类的实例相关的数据。数据成员通常模拟该类所表示的现实世界事物的特征。
**函数成员:**它执行代码,通常会模拟类所表示的现实世界事物的功能和操作。
一个C#类可以有任意数目的数据成员和函数成员。
2. 程序和类
一个运行中的C#程序是一组相互作用的类型对象,它们大部分是类的实例。
3. 声明类
自定义类,定义类的特征和成员,不是创建类的实例。
类的名称,类的成员,类的特征
关键字 类名
Class MyDefineClassName
{
成员声明
}
大括号内声明类的成员
例如,定义一个学生类:
public class Student
{
public string Name;
public int Id;
public int Age;
private double Chinese;
private double English;
public double Get_totalScores()
{
return Chinese + English;
}
}
public 是访问修饰符,class是自定义类的关键字,student是类名称
4. 类成员
字段和方法是重要的类成员类型。字符是数据成员,方法是函数成员
字段:
字段属于类的变量。可以是任何类,无论是预定义类型还是用户定义类型。和所有变量一样,字段是用来保存数据的。可读可写。
类型 字段名称 :Type Identifier
如上自定义类中:
private double Chinese;
private double English;
定义了2个私有字段,类型是double,名称分别是Chinese和English。
所有字段都属于类型,必须在类的内部声明。这个2个变量属于Student类的。
显示和隐式字段的初始化
int x=10; //显示申明和初始化
没有初始化语句,字段值被编译器设为默认值。
整型默认0 ,布尔型默认false, 引用类型默认为null
声明多个字段
int x, y,z =123;
String a,b=”Test”;
变量必须先声明后使用,上字段x,y 是没有赋值的变量,在代码中不允许使用。
方法:
方法是具有名称的可执行代码块,可从程序的不同地方执行,有的也可在其它程序中执行。
方法的组词部分:返回类型,名称, 参数列表,方法体
如果方法无返回值,则使用void,方法没有参数时,要保留一对小括号,方法体由一对大括号组成。
上述代码中的方法
public double Get_totalScores()
{
return Chinese + English;
}
5. 创建变量和类的实例
类的声明只是用于创建类的实例的蓝图。一旦类被声明,就可以创建类的实例了。
类是引用类型。如果类没有被实例化,它的值就是未定义的,就没有在堆上分配内存。
6. 为数据分配内存
声明类类型的变量所分配的内存是用来保存引用的,而不是保存类对象的实际数据。要为实际数据分配内存,需要使用new 运算符。
Student s1 = new Student();
7. 实例成员
实例成员,类的每个实例都是不同的实体,它们都有自己的一组数据成员,不同于同一类的其它实例。因为这些数据成员都和类的实例关联,所以称为实例成员。
静态成员,与类关联的成员,而不是实例成员。
public string Name;
public int Id;
public int Age;
上面的Name,Id, Age 都是实例成员,且公用
Student s1 = new Student();
s1.Age = 10;
s1.Name = “Tester1”;
s1.Id = 1001;
Student s2 = new Student();
s2.Age = 22;
s2.Name = “Tester2”;
s2.Id = 1002;
Console.WriteLine($"{s1.Name} {s1.Id} {s1.Age}");
Console.WriteLine($"{s2.Name} {s2.Id} {s2.Age}");
输出:
Tester1 1001 10
Tester2 1002 22
字段的值与对应的实例有关,修改对象实例的值,只影响该实例的值。
在Student类中增加:
public static string SchoolName=“Middle No.1”;
该字段是静态字段,与实例无关,访问该字段直接使用 类名.字段名称
Console.WriteLine(Student.SchoolName);
8. 访问修饰符
从类的内部,任何函数成员都可以使用成员名称访问类中任何其它成员。
访问修饰符是成员声明的可选部分,指明程序的其它部分如何访问成员。
字段:访问修饰符 类型 字段名称;
方法:访问修饰符 返回类型 方法名称() {……}
5种成员访问控制:
私有private
公有public
受保护的 protected
内部的internal
受保护内部的protected internal
私有访问,是默认的访问级别,不带任何访问修饰符,它就是私有的
显示声明私有和隐式默认私有是等价的。私有成员只能被类的成员看见。
Private int x;
int x;
上演示类中2个私有字段:
private double Chinese;
private double English;
实例对象是无法访问的,且new创建类的实例对象后,被初始化为0
public double Get_totalScores()
{
return Chinese + English;
}
共有方法,类的任何实例都可以使用的
9. 从类的内部访问成员
public double Get_totalScores()
{
return Chinese + English;
}
在类的内部访问2个私有成员OK,在类的外部,实例都是无法访问的。
10. 从类的外部访问成员
要从类的外部访问实例成员,必须包含变量名称和成员名称,中间用句点(.) 分割。
点运算符dot-syntax notation
Student s1 = new Student();
s1.Age = 10;
s1.Name = “Tester1”;
s1.Id = 1001;
类的外部,创建类的实例s1,就可以访问类的实例成员了。