类简介
类是最基本的C#类型,也是一种数据结构,类支持继承和多形性。下面看一下一个最简单的类声明:
/// <summary>
/// 这里为了方便大家观看用的是中文类名,实际编程中尽量不要使用中文
/// </summary>
public class 类
{
/// 定义变量
public int 变量1, 变量2;
/// 构造函数
public 类 ( int 参数1,int 参数2)
{
this. 变量1=参数1;
this. 变量2=参数2;
}
}
使用new运算符创建一个类实例,并会为此实例分配内存;调用构造函数来初始化实例,并返回对实例的引用;
类 a=new 类(20,30);//这里的a是类实例
成员
类成员可能是静态成员(属于类,使用类名调用),可能是实例成员(属于类实例,通过类实例调用),我们这里所说的类实例还有一种说法叫做对象,大家不要纠结这些,说法不一样而已,下面列举一些类可以包含的成员类型:
- 常量
- 字段
- 方法
- 属性
- 索引器
- 事件
- 运算符
- 构造函数
- 终结器(永久放弃类实例前要执行的操作)
- 类型(类声明的嵌套类型)
类型参数
类型参数一般在尖括号里,下面看个示例吧,以下示例中:Students的类型参数是TAge和TSex:
class Studuents<TAge, TSex>
{
public TAge Age;
public TSex Sex;
}
声明为需要使用类型参数的类类型被称为泛型类类型。结构、接口、和委托类型都可以是泛型。使用泛型类时,必须为每个类型参数提供类型自变,包含类型自变量的泛型类型被称为 构造泛型类型,下面看一个示例:
Studuents<int , string> student_1 = new Studuents<int , string> { Age=20 , Sex="男" };
int student_1_age = student_1. Age;
string student_1_sex = student_1. Sex;
基类
派生类继承其基类的成员,基类的变量可以引用相应类的实例或任意派生类的实例。派生类隐式包含其基类所有成员,实例和静态构造函数以及基类的终结器除外。派生类可以自由添加新成员,但是无法删除继承成员的定义。下面我们就看一下例子吧:
/// <summary>
/// 基类(父类)
/// </summary>
public class People
{
public int x, y;
public People ( int x , int y )
{
this. x=x;
this. y=y;
}
//基类的变量可以引用相应类的实例或任意派生类的实例
People a = new People ( 10,20);
People b = new Man ( 10,20,30);
}
/// <summary>
/// 派生类(子类)
/// </summary>
public class Man : People
{
public int z;
public Man ( int x , int y,int z ) : base ( x , y )
{
this. z=z;
}
}
字段
字段主要讲静态字段和实例字段,分别与类和类实例(对象)关联
静态字段只指明一个存储位置
下面看一个例子:
/// <summary>
/// 声明一个学校类
/// </summary>
public class School
{
/// <summary>
/// 静态字段 readonly修饰只读 只能在字段声明期间或在同一个类的构造函数中赋值
/// </summary>
public static readonly School junior_high_school = new School ("初中","3年" );
public static readonly School High_school = new School ( "高中","3年");
public static readonly School University = new School ("大学","专科3年,本科4年");
/// <summary>
///实例字段
/// </summary>
private string china_Name, how_Year;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="china_Name"></param>
/// <param name="how_Year"></param>
public School ( string china_Name,string how_Year)
{
this. china_Name=china_Name;
this. how_Year=how_Year;
}
}