随便玩玩之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() { }
    }
}

 

posted @ 2023-03-13 21:16  冲浪的奶糖  阅读(30)  评论(0编辑  收藏  举报