zoukankan      html  css  js  c++  java
  • 回顾Abstract和Virtual的用法

    今天坐班车的时候,突然就想起来这俩个货了;仔细缕缕,居然越缕越乱较:

    上代码吧:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace VirtualAndAbstract
     8 {
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13            #region MyRegion
    14             //people是 爹:子要在爹的灵魂(抽象)庇佑保护下生存;子在功夫上比爹更高一筹
    15             student stu = new student();//student是子
    16             People p = stu;
    17             p.study();//这是儿子继承爹的心法;
    18             Console.WriteLine(stu.get());//这里是儿子直接拿着老子的兵器,斩杀天下负心汉
    19             Console.ReadKey(); 
    20             #endregion   
    21       
    22         }
    23 
    24             #region abstract大法好
    25         public abstract class People
    26         {
    27             public abstract void study();
    28             public abstract int Add();
    29             public virtual string VirtualMethod()
    30             {
    31                 return "我是abstract下的virtual方法,我必须要有主体";
    32             }
    33             //在abstract下,非abstract的方法要有方法体:get()和VirtualMethod()
    34             public string get()
    35             {
    36                 return "Prozkb";
    37             }
    38         }
    39         public class student : People
    40         {
    41             //爹留下的心法(抽象方法),子要把它全部(老子的家当不能丢)实物化(重载)下来,子也可以对爹的心法进行改良
    42             //
    43             //爹留下的兵器(非抽象方法),子可以直接拿过来杀敌
    44             public override void study()
    45             {
    46                 Console.WriteLine("hhxx");
    47             }
    48 
    49             public override int Add()
    50             {
    51                 throw new NotImplementedException();
    52             }
    53         
    54         }
    55         #endregion
    56      }
    57 }
    View Code
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace VirtualAndAbstract
     8 {
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13          #region MyRegion
    14             FatherClass father = new FatherClass();
    15             SonClass son = new SonClass();
    16             FatherClass baba = new SonClass();
    17             father.GetAge();
    18             
    19             Console.WriteLine(son.GetName());
    20             son.GetAge();
    21           
    22 
    23             Console.ReadKey(); 
    24             #endregion
    25         }
    26         #region virtual 
    27         public class FatherClass
    28         {
    29             public virtual string GetName()
    30             {
    31                 return "方法体";
    32             }
    33             public virtual string SETName()
    34             {
    35                 return "SET方法体";
    36             }
    37 
    38             public void GetAge()
    39             {
    40                 Console.WriteLine("年方二八");
    41             }
    42 
    43         }
    44         public class SonClass : FatherClass
    45         {
    46             //儿子不需要把得的所有虚方法重载;这一点还是比abstract那个爹类有好多了
    47             //
    48             public override string GetName()
    49             {
    50                 return base.GetName();//这里的base相当于爹(FatherClass)
    51             }
    52             #region 儿子重写方法,不能改变老子的参数;不然会走火入魔
    53 
    54             //public override string GetName(string name)
    55             //{
    56             //    return "我把老子的心法改良了,我就是"+name;
    57             //} 
    58             #endregion
    59 
    60 
    61             public static string SonGDCQ()
    62             {
    63                 return "我是儿子自创的乾坤大法:干倒苍穹;俺爹不能用我";
    64             }
    65 
    66             //错误:“VirtualAndAbstract.Program.SonClass.GetStr()”是抽象的,但它包含在非抽象类“VirtualAndAbstract.Program.SonClass”中
    67             //所以,抽象方法要放在抽象类中
    68            // public abstract string GetStr();
    69            
    70         } 
    71         #endregion
    72      }
    73 }
    View Code
  • 相关阅读:
    vmware 更换网络后不能上网
    IDEA “Cannot resolve symbol” 解决办法
    SpringBoot MyBatis druid数据库连接池
    解决分页插件ClassNotFoundException: org.springframework.boot.bind.RelaxedPropertyResolver
    纯CSS绘制不同角度的三角形
    原生js实现移动端点击、长按、左滑、右滑、上滑、下滑等事件模拟
    移动端下拉滚动刷新
    使用锚点定位不改变url同时平滑的滑动到锚点位置,不会生硬的直接到锚点位置
    简单的mock数据调试
    小程序textarea文本域字数控制---并显示已输入字数
  • 原文地址:https://www.cnblogs.com/ZkbFighting/p/8968520.html
Copyright © 2011-2022 走看看