类的继承

一、类的继承

在 C# 中,继承(inheritance)是面向对象编程的重要特性,允许一个类(子类)从另一个类(父类)继承属性和行为。子类可以继承父类的字段、属性、方法和事件,并且可以通过重写方法和定义新方法来扩展或修改父类的行为。以下是 C# 中继承的主要特点和用法:

1. 派生类和基类:

在 C# 中,派生类(子类)通过冒号 : 来指定一个基类(父类)并继承其成员。派生类会继承基类的非私有成员(如公共、受保护、内部),但不能继承基类的构造函数和析构函数。

public class Animal {
	public void Eat() {
		Console.WriteLine("Animal is eating.");
	}
}
public class Dog : Animal {
	public void Bark() {
		Console.WriteLine("Dog is barking.");
	}
}

2. 重写方法:

子类可以通过 override 关键字重写从基类继承的虚拟方法。重写的方法必须具有与基类方法相同的签名,并且必须标记为 virtual 或 abstract (需要在基类中声明)。

public class Animal {
	public virtual void Move() {
		Console.WriteLine("Animal is moving.");
	}
}
public class Dog : Animal {
	public override void Move() {
		Console.WriteLine("Dog is moving.");
	}
}

3. 访问修饰符:

继承时,派生类中不能访问基类中的私有成员。而公共( public )、受保护( protected )、内部( internal )等类型的成员可以被子类访问。

4. 多态性:

继承可以实现多态性,即通过基类的引用来调用子类对象的方法。这使得代码更灵活,可以在运行时动态绑定不同的实现。

Animal someAnimal = new Dog();
someAnimal.Move(); // 虚方法重写实现多态性

继承是面向对象编程中的重要概念,通过继承可以实现代码的重用和扩展。在设计时,应该注意尽量遵循单一职责原则和Liskov 替换原则,避免过度继承导致复杂的类层次结构,同时合理使用多态性,以提高代码的可维护性和灵活性。

二、所有的类继承Object

在 C# 中,所有类都直接或间接地继承自 System.Object 类,也就是说 System.Object 是所有类的根类。在 C# 中, System.Object 类提供了一些重要的成员和方法,包括以下几个常见的成员:

  1. ToString() 方法: ToString() 方法是 System.Object 类中定义的虚拟方法,用于返回表示当前对象的字符串表示形式。类可以重写 ToString() 方法以提供自定义的字符串表示。
  2. Equals() 和 GetHashCode() 方法: Equals() 方法用于比较两个对象是否相等,而GetHashCode() 方法用于获取对象的哈希码。类可以重写这两个方法以提供自定义的相等性比较行为。
  3. GetType() 方法: GetType() 方法用于获取当前对象的类型信息,返回一个表示实例类型的System.Type 对象。
  4. 其他方法: System.Object 类还包含一些其他方法,例如 ReferenceEquals() 方法用于比较两个对象的引用是否相同,还有一些操作符重载如 == 和 != 等。
     

由于所有类都隐式继承自 System.Object ,所以所有类都可以使用 System.Object 中定义的这些成员。这为 C# 中的所有对象提供了一些基本的通用行为和特性,使代码更加一致且易于理解。

以下是一个简单的示例演示了所有类在 C# 中隐式继承自 System.Object 类:

using System;
public class MyClass {
	public void MyMethod() {
		Console.WriteLine("MyMethod called");
	}
}
public class Program {
	public static void Main() {
		MyClass obj = new MyClass();
		// 使用继承自System.Object的方法
		Console.WriteLine(obj.ToString());
		Console.WriteLine(obj.GetType().Name);

		// 使用自定义方法
		obj.MyMethod();
	}
}

在 C# 中,所有类都直接或间接地继承自 System.Object 类,这样确保了统一的基类结构,使得编程更加便捷和一致。

“您的支持是我持续分享的动力”

微信收款码
微信
支付宝收款码
支付宝

目录