解释 C# 中的类的概念
类是 C# 中的基本类型之一。我们可以将类视为与问题域相关的对象的蓝图。它是一个模板,我们可以根据它来创建对象,定义由该类创建的对象集将共享的结构和行为。简而言之,类是千篇一律的,而对象则是这些千篇一律的。
类还支持封装,这是面向对象编程中的一个重要概念。它意味着将数据和对数据进行的操作组合在一个地方,并为该对象的用户提供一个简单的 API。类允许我们封装数据并向其他类隐藏不相关的细节。
我们可以使用 class 关键字,后跟类的名称来创建一个类。
// User.cs public class User{ private string name; private int salary; public void Promote(){ salary += 1000; } }
在上面的例子中,User 是一个代表用户的类。该类封装了两部分数据:name 和 salary。这些被称为类字段,用于保存用户的姓名和薪水。它还有一个名为 Promote() 的方法,用于提高用户的薪水。
每个类都有一个关联的访问修饰符,用于控制该类是否对其他类可见。以下是我们可以为访问修饰符提供的五个可能的值。
访问修饰符 | 描述 |
---|---|
public | 无限制访问 |
protected | 对派生类的访问受限 |
internal | 对程序集的访问受限 |
protected internal | 对程序集或派生类的访问受限 |
private | 无外部访问 |
要创建类的实例,我们可以使用 new 关键字。 new 运算符计算对象数据所需的字节数,并为对象分配内存。然后,它返回指向新创建对象的指针(也称为引用)。
var alice = new User(); var bob = new User();
然后,此引用存储在 = 符号左侧的变量中。在上面的例子中,Alice 和 Bob 持有对新创建对象的引用或指针。
在 C# 中,类的命名约定遵循 PascalCase,即大写复合词中每个单词的首字母,例如 StringBuilder、UserController 等。没有必要在名称与类名匹配的文件中创建类。但是,这是大多数 C# 项目使用的约定。
构造函数
在上面的例子中,当我们创建 User 类的实例(即 alice 和 bob)时,我们没有提供他们的初始名称和薪水。新创建的对象通常需要一些信息来完成其工作,并且构造函数用于初始化类数据。
我们可以添加一个构造函数来为用户提供其姓名和薪水,如下所示 −
public class User{ private string name; private int salary; public User(string name, int salary){ this.name = name; this.salary = salary; } public void Promote(){ salary += 1000; } }
有了构造函数,我们就可以在创建新实例时传递用户的姓名和薪水。
var alice = new User("Alice", 50000); var bob = new User("Bob", 45000);
一个类中可以有多个构造函数。有了多个构造函数,我们就可以以不同的方式初始化类。例如,我们可以添加另一个仅接受用户姓名并分配默认薪水的构造函数。
public User(string name){ this.name = name; this.salary = 50000; }
示例
using System; class Program{ static void Main(){ var alice = new User(); alice.Print(); var bob = new User(); bob.Print(); var chris = new User("Chris", 50000); chris.Print(); var debs = new User("Debs", 45000); debs.Print(); var scott = new User("Scott"); scott.Print(); } } public class User{ private string name; private int salary; public User(){ } public User(string name){ this.name = name; this.salary = 50000; } public User(string name, int salary){ this.name = name; this.salary = salary; } public void Promote(){ salary += 1000; } public void Print(){ Console.WriteLine($"{name}: {salary}"); } }
输出
: 0 : 0 Chris: 50000 Debs: 45000 Scott: 50000