### C#中的继承学习 #### 一、继承基础 在面向对象编程中,**继承**是一种重要的机制,它允许创建一个新类(称为派生类或子类),该类继承了现有类(称为基类或父类)的属性和行为。这种特性有助于代码的复用,并且能够构建出更加灵活和易于维护的程序结构。 #### 二、继承的关键概念 在C#中,实现继承非常简单。只需要在一个类声明中指定父类即可。例如: ```csharp public class BaseClass { /* 基类定义 */ } public class DerivedClass : BaseClass { /* 派生类定义 */ } ``` 其中,`DerivedClass` 就是 `BaseClass` 的派生类。派生类不仅继承了基类的所有非私有成员,还可以添加新的成员或者修改继承来的成员。 #### 三、方法隐藏与重写 在C#中,可以通过 **方法隐藏** 和 **方法重写** 来处理继承后的方法行为。 1. **方法隐藏**:使用 `new` 关键字可以隐藏基类中的方法。这意味着,当从派生类的对象调用该方法时,会调用派生类中同名的方法,而不会考虑基类中的同名方法是否存在。这种方法被称为“隐藏”。 ```csharp public class BaseClass { public void Method() { Console.WriteLine("Base method"); } } public class DerivedClass : BaseClass { new public void Method() { Console.WriteLine("Derived method"); } } ``` 当从 `DerivedClass` 的实例调用 `Method()` 时,将输出 "Derived method"。 2. **方法重写**:使用 `override` 关键字可以重写基类中的虚方法。这使得派生类可以改变从基类继承的方法的行为。 ```csharp public class BaseClass { public virtual void Method() { Console.WriteLine("Base method"); } } public class DerivedClass : BaseClass { public override void Method() { Console.WriteLine("Derived method"); } } ``` 在这个例子中,当从 `DerivedClass` 的实例调用 `Method()` 时,将输出 "Derived method"。 - **重写** 是在运行时根据对象的实际类型来确定调用哪个方法的,因此它提供了多态性。 - **隐藏** 则是在编译时确定的,效率更高。 #### 四、虚方法和密封方法 1. **虚方法**:在基类中,可以使用 `virtual` 关键字来声明虚方法。虚方法可以在派生类中被重写。 ```csharp public class BaseClass { public virtual void VirtualMethod() { Console.WriteLine("Base VirtualMethod"); } } public class DerivedClass : BaseClass { public override void VirtualMethod() { Console.WriteLine("Derived VirtualMethod"); } } ``` 2. **密封方法**:如果不想让某个方法被进一步重写,可以使用 `sealed` 关键字来标记虚方法或重写的方法。 ```csharp public class BaseClass { public virtual void VirtualMethod() { } } public class DerivedClass : BaseClass { public sealed override void VirtualMethod() { } } ``` 在这里,`VirtualMethod` 在 `DerivedClass` 中被声明为 `sealed`,意味着它不能再被派生类重写。 #### 五、静态方法与虚方法 - **静态方法** 不能被声明为虚方法,也不能被重写。 - 如果一个方法是虚方法,则不能将其声明为静态方法。 - 类似地,不能将虚方法声明为私有的,因为私有方法无法被派生类访问。 #### 六、方法签名的重要性 方法签名包括方法的名称、参数列表和返回类型。在进行方法重写时,派生类的方法签名必须与基类的方法签名完全相同。 例如,以下示例展示了错误的方法重写方式: ```csharp public class BaseClass { public virtual void Method(int i) { } } public class DerivedClass : BaseClass { // 错误的方式: protected override void Method(double d) { } // 参数类型不匹配 public override int Method(int i) { return 0; } // 返回类型不匹配 } ``` 在这些例子中,由于方法签名不匹配,编译器将报错。 #### 七、总结 通过以上介绍,我们可以看到,在C#中,继承是一个非常强大的功能,它不仅可以提高代码的复用性,还能通过方法隐藏和重写等特性增强代码的灵活性。正确理解并运用这些概念对于编写高质量的C#程序至关重要。
- 粉丝: 1
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助