C#子类对基类方法的继承、重写与隐藏详解
"C#子类对基类方法的继承、重写与隐藏详解" C#子类对基类方法的继承、重写与隐藏是OOP编程中的一些重要概念,掌握这些概念对于学习C#和使用C#编程语言非常重要。下面,我们将通过示例代码详细介绍C#子类对基类方法的继承、重写与隐藏。 一、子类继承基类非私有方法 在C#中,子类可以继承基类的非私有方法,这是最简单的一种情况。例如: ```csharp class Person{ public void Greeting() { Console.WriteLine("Hello, I am Person"); } } class Employee : Person{} ``` 在这个例子中,子类Employee自动继承了基类Person的Greeting方法。当我们在子类实例调用这个方法时,实际上调用的是基类的方法。 二、子类覆盖基类方法 在C#中,子类可以覆盖基类的方法,这是最常见的情况。例如: ```csharp class Person{ public virtual void Greeting() { Console.WriteLine("Hello, I am Person"); } } class Employee : Person{ public override void Greeting() { Console.WriteLine("Hello, I am Employee"); } } ``` 在这个例子中,基类方法通过关键字virtual表明方法可以被覆盖,子类通过关键字override实现对基类方法的覆盖。在调用部分,无论变量类型是子类还是基类,只要对象实际类型是子类,调用的方法都是子类覆盖的方法,这也是多态的实现基础。 三、子类隐藏基类方法 在C#中,子类可以隐藏基类的方法,这是比较复杂的情况。例如: ```csharp class Person{ public void Greeting() { Console.WriteLine("Hello, I am Person"); } } class Employee : Person{ public new void Greeting() { Console.WriteLine("Hello, I am Employee"); } } ``` 在这个例子中,子类Employee隐藏了基类Person的Greeting方法。这里的结果可能会出乎某些初学者的意料,为什么明明是子类Employee的实例,却在不同的引用变量类型下呈现出了不一样的效果?这是因为C#的函数调用机制有关,一般来说,C#编译成MSIL之后,有两种函数调用方式:Call和Callvirt。如果调用的方法非虚,则引用变量类型决定了最终调用的方法;反之,如果调用的方法为虚,则实例变量类型决定最终调用的方法。 四、子类隐藏基类的虚方法 在C#中,子类可以隐藏基类的虚方法,这是最复杂的情况。例如: ```csharp class Person{ public virtual void Greet() { Console.WriteLine("Hello, I am Person"); } } class Employee : Person{ public new void Greet() { Console.WriteLine("Hello, I am Employee"); } } ``` 在这个例子中,子类Employee隐藏了基类Person的虚方法Greet()。这里的结果可能会出乎某些初学者的意料,为什么明明是子类Employee的实例,却在不同的引用变量类型下呈现出了不一样的效果?这是因为C#的函数调用机制有关,一般来说,C#编译成MSIL之后,有两种函数调用方式:Call和Callvirt。如果调用的方法非虚,则引用变量类型决定了最终调用的方法;反之,如果调用的方法为虚,则实例变量类型决定最终调用的方法。 C#子类对基类方法的继承、重写与隐藏是非常重要的概念,掌握这些概念对于学习C#和使用C#编程语言非常重要。
- 粉丝: 4
- 资源: 963
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助