随便玩玩之C# 17 数据类型:类
随便玩玩之C# 17 数据类型:类
基本数据类型只能一个变量存一个数据。
生活中经常有各类打包的数据,比如学生的成绩有数学、英语、语文等各个科目的。学生的体质评测有身高、体重等。这种打包的数据可以用类这个类型来做个模板,需要的数据就往里面填数据。
当然,类,不仅仅用来存数据。这一节只说一下存数据的事情。其他的后面再说。类里面有方法、有属性、有变量,类可以继承等等。
先定义一个类:
using System;
namespace DataTypes_Class
{
// 这是一个类。C#语言自动生成的。
public class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Console.ReadKey();
}
}
// 这是我们自定义的类。
public class Student
{
}
}
面向对象语言里一切皆对象。所谓对象就是按照类这个模板生成的对象实例。Main()方法就位于一个Program类中。
第6-14行是一个类,类的名称是Program
第17-20行是一个类,类的名称是Student
类的声明标识符是class,定义格式是后面带一对大括号。
我们往类里面添加一些属性。属性用来保存数据
using System;
namespace DataTypes_Class
{
// 这是一个类。C#语言自动生成的。
public class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Console.ReadKey();
}
}
// 这是我们自定义的类。
// 定义了5个属性,分别是学号,姓名,语文,英语,数学成绩。
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public int Chinese { get;set; }
public int English { get; set; }
public int Math { get; set; }
}
}
给类定义了五个属性。现在这个类只是一个蓝图,是一个模板。要实例化成对象才能被调用。
using System;
namespace DataTypes_Class
{
// 这是一个类。C#语言自动生成的。
public class Program
{
static void Main(string[] args)
{
// 实例化对象,现在对象类实例化了,但是没有数据。
Student StudentResult = new Student();
Console.ReadKey();
}
}
// 这是我们自定义的类。
// 定义了5个属性,分别是学号,姓名,语文,英语,数学成绩。
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public int Chinese { get;set; }
public int English { get; set; }
public int Math { get; set; }
}
}
在实例化对象那一句中,Student表示声明一个刚刚定义的类的类型的数据(用刚刚的那个定义的模板的数据格式定义一个数据类型),StudentResult是实例化的对象名称。new表示用Student模板实例化一个对象,Student()表示所使用的类(模板)。
如何往对象里面添加数据呢?
using System;
namespace DataTypes_Class
{
// 这是一个类。C#语言自动生成的。
public class Program
{
static void Main(string[] args)
{
// 实例化对象,现在对象类实例化了,但是没有数据。
Student StudentResult = new Student ();
StudentResult.Id = 2;
StudentResult.Name = "张三";
StudentResult.Chinese = 80;
StudentResult.Math = 90;
Console.WriteLine("学号:{0}",StudentResult.Id);
Console.WriteLine("姓名:{0}", StudentResult.Name);
Console.WriteLine("语文:{0}", StudentResult.Chinese);
Console.WriteLine("数学:{0}", StudentResult.Math);
Console.WriteLine("英语:{0}", StudentResult.English);
Console.ReadKey();
}
}
// 这是我们自定义的类。
// 定义了5个属性,分别是学号,姓名,语文,英语,数学成绩。
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public int Chinese { get;set; }
public int English { get; set; }
public int Math { get; set; }
}
}
对象实例化后,对象的属性可以用对象名称加点加属性名称来调用。
StudentResult.Name
之后就可像基本数据类型一样进行赋值。
StudentResult.Name = "张三";
之后可以像基本数据类型一样进行调用。
Console.WriteLine("姓名:{0}", StudentResult.Name);
上面代码中没有给英语成绩的属性赋值,为什么输出是0呢。因为对象的初始化就是这样的。对象的初始化由类的构造负责。
上面代码,使用Student类这个模板实例化了张三的成绩这个对象。也就是给他的成绩打了个包。那么如何打包使用这些数据呢。
可以定义一个函数来处理这一包数据,把对象当作参数传递。声明方法时传入的参数用的是类,因为类在任何时候都存在。调用方法时,传入的是实参,是对象。
using System;
namespace DataTypes_Class
{
// 这是一个类。C#语言自动生成的。
public class Program
{
static void Main(string[] args)
{
// 实例化对象,现在对象类实例化了,但是没有数据。
Student StudentResult = new Student ();
StudentResult.Id = 2;
StudentResult.Name = "张三";
StudentResult.Chinese = 80;
StudentResult.Math = 90;
PrintResult (StudentResult);
Console.ReadKey();
}
// 声明一个打印成绩的方法
// 方法不返回值,只是处理一些数据
// 方法的名称叫做PrintResult
// 传入的数据类型是Student
// 传入数据的形参是student,和传入数据类型Student只有一个字母的差别。
// 但是代表的含义不同,一个是类型,一个是参数
static void PrintResult(Student student)
{
Console.WriteLine(student.Id);
Console.WriteLine(student.Name);
Console.WriteLine(student.Chinese);
Console.WriteLine(student.Math);
Console.WriteLine(student.English);
Console.WriteLine(student.Math);
}
}
// 这是我们自定义的类。
// 定义了5个属性,分别是学号,姓名,语文,英语,数学成绩。
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public int Chinese { get;set; }
public int English { get; set; }
public int Math { get; set; }
}
}
第28-36行声明了一个方法,传入了类,按照模板处理一些数据。第17行调用了这个方法,传入了实例化的对象。
其他:
为什么Student()后要带上一对括号呢。这段代码中没有Student()这个方法函数啊。
是因为类在实例化过程中自动创建了一个构造函数和析构函数,构造函数就是实例化是第一个执行的方法函数,析构函数就是类的实例被销毁是执行的方法函数。就像启动车子,肯定是各种仪表盘都先转一转,车子熄火时仪表盘的指针肯定要回到原位。
构造函数可以有执行代码,也可以没有代码。
加上构造函数和析构函数,更清晰明了。
using System;
namespace DataTypes_Class
{
// 这是一个类。C#语言自动生成的。
public class Program
{
static void Main(string[] args)
{
// 实例化对象,现在对象类实例化了,但是没有数据。
Student StudentResult = new Student ();
Console.ReadKey();
}
}
// 这是我们自定义的类。
// 定义了5个属性,分别是学号,姓名,语文,英语,数学成绩。
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public int Chinese { get;set; }
public int English { get; set; }
public int Math { get; set; }
// 构造函数和析构函数与类同名,只不过析构函数前要加一个波浪号。
// 一定要和类同名,不同名的就不是构造函数和析构函数。
// 构造函数,即使不声明构造函数,C#依然会有一个构造函数。
public Student() { }
//析构函数
~Student() { }
}
}

浙公网安备 33010602011771号