C# class:类

在 C# 中,类是引用类型的,其中包括状态(成员属性)和操作(成员方法和其它函数成员),我们可以动态创建类的实例(instance),这个实例也被称为对象(object),我们可以通过类和对象来设计程序。

1、类的定义

类的定义需要使用 class 关键字,语法格式如下:

<access specifier> class class_name
{
    // 成员属性
    <access specifier> <data type> variable1;
    <access specifier> <data type> variable2;
    ...
    <access specifier> <data type> variableN;
    // 成员函数/成员方法
    <access specifier> <return type> method1(parameter_list)
    {
        // 函数体
    }
    <access specifier> <return type> method2(parameter_list)
    {
        // 函数体
    }
    ...
    <access specifier> <return type> methodN(parameter_list)
    {
        // 函数体
    }
}

语法说明如下:
  • <access specifier> 为访问权限修饰符,用来指定类或类中成员的访问规则,可以忽略不写,如果没有指定,则使用默认的访问权限修饰符,类的默认访问权限修饰符是 internal,类中成员的默认访问权限修饰符是 private;
  • class_name 为类的名称;
  • <data type> 为数据类型,用来指定成员属性的数据类型;
  • variable1、variable2 等为成员属性的名称,类似于变量名;
  • <return type> 为返回值类型,用来指定成员函数的返回值类型;
  • method1、method2 等为成员函数的名称。

2、对象

类和对象是不同的概念,类决定了对象的类型,但不是对象本身。另外,类是在开发阶段创建的,而对象则是在程序运行期间创建的。我们可以将对象看作是基于类创建的实体,所以对象也可以称为类的实例。

想要创建一个类的实例需要使用 new 关键字,假如我们创建了一个名为 Student 的类,若要创建这个类的对象,语法格式如下:

Student Object = new Student();

上面的示例中,前面的 Student 是我们要创建的对象类型,而 Object 则是一个变量,它引用了 Student 类实例(Student 类的对象)的内存地址。new 关键字在这里的作用主要是在程序运行时为类的实例分配内存。

除此之外,我们还可以像创建普通变量那样只创建一个 Student 类型的变量,而不使用 new 关键字实例化 Student 这个类,例如:

Student Object2;

不过不建议使用这样的写法,因为此时的 Object2 只是一个 Student 类型的普通变量,它并没有被赋值,所以不能使用 Object2 来访问对象中的属性和方法。如果非要使用 Object2 的话,则可以将一个已经创建的对象赋值给它,例如:

Student Object3 = new Student();
Student Object2 = Object3;

上面示例中的 Object2 和 Object3 指向同一个 Student 对象,因此使用 Object3 对 Student 对象的任何操作也会影响到 Object2。

对象创建完成后如果要通过对象来访问类中的成员,则需要使用点.运算符连接对象的名称和成员的名称,如下所示:

Student Object = new Student();
Object.method();    // 访问成员函数
Object.variable;      // 访问成员属性

3、类和对象的使用

下面通过一些示例来演示一下类和对象的具体使用方法。

【示例】创建一个公共的学生类,类中包括一些成员属性和成员方法,然后实例化这个类,并通过类的对象调用类中的成员属性和成员方法。
using System;

namespace c.biancheng.net
{
    class Demo
    {
        static void Main(string[] args) 
        {
            Student stu1 = new Student();
            Student stu2 = new Student();
            stu1.insert(101, "张三", "男", 18);
            stu1.display();
            stu2.insert(102, "李四", "女", 16);
            stu2.display();

        }
    }

    public class Student{
        public int id;
        public string name;
        public string sex;
        public int age;
        public void insert(int i, string n, string s, int a){
            id = i;
            name = n;
            sex = s;
            age = a;
        }
        public void display(){
            Console.WriteLine("编号:{0}  姓名:{1}  性别:{2}  年龄:{3}", id, name, sex, age);
        }
    }
}
运行结果如下:

编号:101  姓名:张三  性别:男  年龄:18
编号:102  姓名:李四  性别:女  年龄:16