zoukankan      html  css  js  c++  java
  • 关于在C#中对类中的隐藏基类方法和重写方法的理解

      最近在学习C#,在C#中的类看到重写和隐藏基类的方法这些概念。才开始感觉自己不是很理解这些概念。也区分不开这些概念。通过自己的查找资料和练习后。慢慢的理解了类中的隐藏和重写这个概念。在C#中只有在基类定义了一些虚方法才能在派生类中重写基类中的虚方法。但是如果在派生类中使用隐藏方法,就不用在基类中定义虚方法。虚方法和重写实现的功能感觉是差不多的。都是在派生类中改变了基类中的方法,但是两者还是有质的区别,概念的性质也是不一样的。
       重写是指:将基类中的方法替换掉,也就是抹掉基类中的原有方法,在派生类中重新写一种方法。当然重写的这个新方法也会作用到基类中。听着很抽象,但是看看代码就知道了。

    代码如下:

     1 using System;
     2 namespace LHT
     3 {
     4     class a
     5     {
     6         public virtual void print()//虚方法,关键字为virtual
     7         {
     8             Console.WriteLine("这个是基类中的虚方法");
     9         }
    10     }
    11 
    12     class b : a
    13     {
    14         public override void print()//重写基类中的方法,关键字为override
    15         {
    16             Console.WriteLine("这个是派生类中的重写方法");
    17         }
    18     }
    19 
    20     class c
    21     {
    22         static void Main()
    23         {
    24             a temp1 = new a();
    25             b temp = new b();
    26             temp.print();
    27             temp.print();
    28             Console.ReadKey();
    29         }
    30     }
    31 }
    View Code

    结果如下:

    这个是派生类中的重写方法
    这个是派生类中的重写方法

    隐藏是指将基类中的方法忽略掉,再在派生类中写一个方法,这个方法只是在派生类中有效,并不会影响到基类(当然基类中的方法可以是普通的方法,也可以是虚拟的方法)。

    代码如下:

     1 using System;
     2 namespace lht
     3 {
     4     class a
     5     {
     6         public void print()//普通的方法
     7         {
     8             Console.WriteLine("这个是基类中方法");
     9         }
    10     }
    11     class b : a
    12     {
    13         new public void print()//隐藏基类的方法,在派生类中定义新的方法(关键字new)
    14         {
    15             Console.WriteLine("这个是派生类中的方法");
    16         }
    17     }
    18     class c
    19     {
    20         static void Main()
    21         {
    22             b temp = new b();
    23             a temp1 = new a();
    24             temp.print();
    25             temp1.print();
    26             Console.ReadKey();
    27         }
    28     }
    29 }
    View Code

    结果如下:

    这个是派生类中的方法
    这个是基类中方法

  • 相关阅读:
    Python中的passed by assignment与.NET中的passing by reference、passing by value
    从系统性能优化谈对象相等性
    .NET Core应用的三种部署方式
    cola-ui的使用
    谁不是一边娶妻生子,一边死在路上。请你好好生活
    MySQL的5种时间类型的比较
    压缩20M文件从30秒到1秒的优化过程
    CentOS 7下MySQL 5.7安装
    CentOS6.5下安装JDK1.7+MYSQL5.5+TOMCAT7+nginx1.7.5环境安装文档
    CentOS下安装FreeTDS
  • 原文地址:https://www.cnblogs.com/ZERO-TAO/p/5467929.html
Copyright © 2011-2022 走看看