zoukankan      html  css  js  c++  java
  • 里氏替换原则

    1)说明:

    C#中在使用继承的过程中可能会出现子类对象转换为父类类型使用的情况,这个过程就叫做里氏替换原则。多用于将子类对象作为实参传入形参为父类类型的方法中,进而实现“多态”。

    2)扩展:

    在C++中亦叫做“赋值兼容性原则”,同样是实现多态的主要途径,其原理是通过虚函数表与VPTR指针实现“迟绑定”,进而判断调用具体的函数。

    3)应用之一:类型转换

    a. 隐式转换:子类对象转换为父类类型可以直接转;

    b. 显式转换:父类对象转换为子类类型必须使用强转(强制转换),前提是这个父类变量确实指向的是一个子类对象。其后果由程序员负责。

    4)强制转换的两种方法:

     

    5)使用as进行强转的优点:

     如果使用前者,转换不成功会报异常,而使用“as”的话,如果转换不成功不会报异常而是会返回null。

    6)应用之二:作为参数

     形参为父类类型,实参为子类对象,方法调用时根据实参的实际类型调用相应的方法,常用于实现多态。  

    7)代码:  

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 
     6 namespace _01里氏替换原则
     7 {
     8     public class Program
     9     {
    10         static void Main(string[] args)
    11         {
    12             //============================类型转换1=========================
    13             //方法1:判断+转换【两次判断】
    14             Person p1 = new Chinese();
    15             if (p1 is Chinese)//返回true
    16             {
    17                 //类型转换
    18                 Chinese cn1 = (Chinese)p1;
    19             }
    20             else
    21             {
    22                 Console.WriteLine("类型不匹配");
    23             }
    24             Console.ReadKey();
    25 
    26             //============================类型转换2=========================
    27             //方法2:as转换 【一次判断】
    28             Person p2 = new Chinese();
    29             Chinese cn2 = p2 as Chinese;
    30             Console.WriteLine(cn2.Age);
    31             Console.ReadKey();
    32 
    33         }
    34     }
    35     public class Person
    36     {
    37         public string Name
    38         {
    39             set;
    40             get;
    41         }
    42         public int Age
    43         {
    44             set;
    45             get;
    46         }
    47     }
    48     public class Chinese:Person
    49     {
    50         public string Color { set; get; }
    51     }
    52 }
    View Code

     

     

  • 相关阅读:
    20200116
    20200115
    20191214数组之四:数字不相同的完全平方数(关于数位上数字判断与sprintf)
    结构体与C++sort()函数的用法
    字符串常用函数
    sscanf用法
    螺旋矩阵
    模m的k次根
    梅森素数与完全数
    bit_reverse_swap
  • 原文地址:https://www.cnblogs.com/gisk/p/4998106.html
Copyright © 2011-2022 走看看