## 1. 类的基本概念
类是面向对象编程中实现封装和抽象的基础,是构建软件时组织代码的逻辑单元。它定义了一组具有相同属性和方法的对象的蓝图。
## 2. 类的声明
在C#中,类的声明通常包括以下几个部分:
- **访问修饰符**:如`public`、`private`、`internal`等,用于控制类的访问权限。
- **类名**:类的名称,通常采用大驼峰命名法。
- **基类**(可选):通过`:`继承自某个基类。
- **类体**:包含类的成员,如字段、方法、属性等。
示例:
```
public class Person
{
// 类的成员
}
```
## 3. 类的成员
类的成员是类的组成部分,包括字段、方法、属性、构造函数、析构函数、事件等。
### 3.1 字段
字段是类中声明的变量,用于存储数据。字段可以是静态的(类级别)或实例的(对象级别)。
- **实例字段**:每个对象实例拥有自己的副本。
- **静态字段**:属于类,而不是类的任何特定对象。
- **常量字段**:值在初始化后不能改变。
- **只读字段**:可以在构造函数中初始化一次,之后不能修改。
示例:
```
public class Person
{
public const int MaxAge = 150; // 常量字段
public string Name; // 实例字段
private int _age; // 私有实例字段
public readonly int ID; // 只读字段
}
```
### 3.2 方法
方法是类中定义的函数,用于执行特定的操作。方法可以是静态的或实例的。
- **静态方法**:通过类直接调用,不依赖于类的实例。
- **实例方法**:需要类的实例来调用。
示例:
```
public class Calculator
{
public static int Add(int a, int b) // 静态方法
{
return a + b;
}
public int Multiply(int a, int b) // 实例方法
{
return a * b;
}
}
```
### 3.3 属性
属性提供了访问类中字段的安全方式,可以有`get`和`set`块。
示例:
```
public class Product
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
}
```
## 4. 类的继承与多态
### 4.1 继承
继承是面向对象编程的核心概念之一,允许一个类(派生类)继承另一个类(基类)的成员。
示例:
```
class Triangle
{
public virtual double ComputeArea(int a, int b, int c)
{
double s = (a + b + c) / 2.0;
return Math.Sqrt(s * (s - a) * (s - b) * (s - c));
}
}
class RightAngledTriangle : Triangle
{
public override double ComputeArea(int a, int b, int c)
{
return a * b / 2.0;
}
}
```
### 4.2 多态
多态允许派生类重写基类的方法,并在运行时动态调用派生类的方法。
示例:
```
Triangle tri = new Triangle();
Console.WriteLine(tri.ComputeArea(2, 5, 6));
RightAngledTriangle rat = new RightAngledTriangle();
Console.WriteLine(rat.ComputeArea(3, 4, 5));
```
## 5. 类的封装
封装是将类的成员隐藏在类的内部,仅通过公共接口暴露必要的功能。例如,通过私有字段和公共属性实现封装。
示例:
```
public class Person
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
}
```
## 6. 类的实例化
类的实例化是通过`new`关键字创建类的对象。
示例:
```
Person person = new Person();
person.Name = "Alice";
```
## 7. 静态成员与实例成员
- **静态成员**:属于类本身,可以通过类名直接访问。
- **实例成员**:属于类的对象实例,需要通过对象访问。
示例:
```
public class MyClass
{
public static int StaticField = 10;
public int InstanceField = 20;
}
MyClass.StaticField; // 访问静态成员
MyClass myObject = new MyClass();
myObject.InstanceField; // 访问实例成员
```
## 8. 嵌套类
嵌套类是定义在另一个类内部的类。
示例:
```
public class OuterClass
{
public class InnerClass
{
public void Display()
{
Console.WriteLine("Inner class method.");
}
}
}
OuterClass.InnerClass inner = new OuterClass.InnerClass();
inner.Display();
```