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

    结果如下:

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

  • 相关阅读:
    20165211 2017-2018-2 《Java程序设计》第1周学习总结
    nginx解析漏洞
    Killable Processes in Oracle Database
    Know more about PGA_AGGREGATE_LIMIT 12c 19c
    mysql查看存储过程函数
    oracle 12.1.0.2升级oracle12.2.0.1(non cdb)
    MySQL 一张表单个索引最多支持创建16个字段
    AWR automatic or manual snapshot hangs – EXADATA
    创建表时报错,索引列超过最大约束
    mysql while 循环
  • 原文地址:https://www.cnblogs.com/ZERO-TAO/p/5467929.html
Copyright © 2011-2022 走看看