CodeGym /课程 /C# SELF /类的声明语法和结构

类的声明语法和结构

C# SELF
第 16 级 , 课程 1
可用

1. 类声明的一般结构

想象一下:C#里的类就像一栋楼的蓝图。在蓝图里我们会写清楚有几间房、墙是什么颜色、门窗在哪。类里就是描述对象有哪些属性(比如名字、年龄)和能干啥(比如“打招呼”、“要工资”)。

类的声明总是包含三个主要部分:

  1. 访问修饰符(publicprivateinternalprotected)——谁能用这个类。为了简单起见,我们现在用public,这样类“到处都能看见”。
  2. 关键字class——让编译器明白我们确实是在描述一个类。
  3. 类名——按惯例首字母大写。
  4. 用大括号包起来的类体——这里面写上类的所有内容:字段、属性、方法。

大致长这样:

public class 类名
{
    // 这里会有类的字段、属性和方法
}
C#里的类声明

例子:学生类

public class Student
{
    // 字段(属于对象的变量)
    public string Name;
    public int Age;
}

现在这个类就像个空盒子:我们说了学生应该有名字和年龄,但还没教他干啥。

2. 类的字段(fields)

字段就是属于类对象的变量。比如每个学生都得有自己的名字和年龄——所以它们写成字段:

public class Student
{
    public string Name;
    public int Age;
}

现在你创建Student类型的对象时,每个对象都会有自己的名字和年龄。

创建对象的例子:

Student sasha = new Student();
sasha.Name = "萨沙";
sasha.Age = 20;

这里我们创建了sasha对象,然后分别给他的字段赋值。这个方式适合最简单的入门(关于构造函数我们下节课会详细聊)。

3. 类的方法(functions)

方法就是对象的“动词”,也就是它能做的事。比如学生可以打招呼。为此我们在类里写个方法:

public class Student
{
    public string Name;
    public int Age;

    public void SayHello()
    {
        Console.WriteLine($"你好,我叫{Name},我{Age}岁了!");
    }
}

现在每个学生都能“打招呼”——而且会用自己的名字和年龄。

方法的使用例子:

Student sasha = new Student();
sasha.Name = "萨沙";
sasha.Age = 20;
sasha.SayHello(); // 会输出:你好,我叫萨沙,我20岁了!

4. 类的属性(properties)

属性就是“智能”字段,可以在读写值时加点特殊操作。在现代C#里属性比字段用得多,因为更灵活、可控。就像电一样:看着简单,其实能玩出花来。


public class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
}
类属性的声明

这里get; set;会自动生成字段,但以后可以加逻辑。对类的使用者来说,属性和字段几乎一样用。

例子:

Student katya = new Student();
katya.Name = "卡佳";
katya.Age = 18;
Console.WriteLine(katya.Name); // 卡佳

关于类属性的细节——下节课再聊 :P

5. 注释

无聊但很重要!和其他代码一样,类里也要写注释,说明字段或方法是干啥的:

public class Student
{
    // 学生的名字
    public string Name { get; set; }
    
    // 学生的年龄(单位:岁)
    public int Age { get; set; }

    // 学生打招呼
    public void SayHello()
    {
        Console.WriteLine($"你好,我叫{Name},我{Age}岁了!");
    }
}

这样代码更容易看懂,就算项目很大也不容易迷路。

6. 访问修饰符

访问修饰符就像不同锁的门。它们决定了谁、从哪能访问类的成员。主要有这些:

  • public:到处都能访问(我们现在默认用这个)。
  • private:只能在这个类里用。
  • internal:只能在当前程序集(项目、库)里用。
  • protected:只能在类和它的子类里用。

例子:把字段藏起来不让外部访问:

public class Student
{
    private int age; // 只能在Student里用
    public string Name { get; set; }

    public void SetAge(int value)
    {
        if (value > 0)
            age = value;
    }

    public int GetAge()
    {
        return age;
    }
}

刚开始学时大家都喜欢把成员都写成public,这样不容易搞混,但实际项目里这么做不好:有些实现细节最好藏起来。

7. 类的静态成员

有时候类里有些数据或方法不是属于某个对象,而是属于整个类。这就是静态成员(static members)。

比如:我们想统计学生的总数。

public class Student
{
    public static int StudentsCount = 0;

    public string Name { get; set; }
    public int Age { get; set; }
}

访问静态成员要用类名:

Student.StudentsCount = 0;

每个对象有自己的属性/字段,但静态的是大家共用的。比如有10个学生,每个人有自己的Name,但StudentsCount只有一个。

8. 例子:完整的学生类(带方法版)

我们来把所有东西拼一起,写个功能齐全、格式规范的学生类:

public class Student
{
    // 静态学生计数器——属于所有学生
    public static int Count = 0;

    // 名字和年龄——属性
    public string Name { get; set; }
    public int Age { get; set; }

    // 构造函数(构造函数下节课讲)
    public Student(string name, int age)
    {
        Name = name;
        Age = age;
        Count++; // 每创建一个对象计数器+1
    }

    // 打招呼方法
    public void SayHello()
    {
        Console.WriteLine($"你好!我是{Name}。我{Age}岁。");
    }
}

主程序里的用法:

class Program
{
    static void Main()
    {
        Student sasha = new Student("萨沙", 20);
        Student katya = new Student("卡佳", 22);

        sasha.SayHello();
        katya.SayHello();

        Console.WriteLine($"学生总数:{Student.Count}");
    }
}

9. 代码组织:一个文件=一个类

在.NET里,通常每个public类放一个单独的文件,文件名和类名一样。比如:

Student.cs
|
|__ public class Student

主程序文件(Program.cs)里写入口和主逻辑。这样项目里类多了也好找。

10. 用类和对象时常见的坑

坑1:忘了大括号或者写错位置。
编译器会报错,但有时候不太好找是哪错了。尤其是代码长了,大括号乱了很难定位。

坑2:在同一个命名空间里声明了两个同名类。
编译器绝对不让你这么干。其实也好,不然你自己都搞不清用的是哪个类。

坑3:字段和属性名字写成一样。
这样用类成员时会很混乱。就算老司机有时也会懵:“我这是用字段还是属性?”

坑4:没写访问修饰符。
默认类会变成internal,如果你写库的话,外部可能就访问不到了。

坑5:通过实例访问静态成员。
如果写成student.Count而不是Student.Count,编译器可能不报错,但会让人迷糊。这样看起来Count像是某个学生的,其实是大家的。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION