我正在阅读这段代码:

private static WaveFormat WaveFormatFromBlob(Blob blob){
 if(blob.Length == 40)
    return (WaveFormatExtensible)Marshal.PtrToStructure(blob.Data, typeof(WaveFormatExtensible));
 return (WaveFormat)Marshal.PtrToStructure(blob.Data, typeof (WaveFormat));
}


如果将returnvalue声明为WaveFormat,如何返回WaveFormatExtensible?接下来的问题是:如何在调用例程中区分返回给我的类型并选择相应的分配?我需要更改一个或另一个参数,具体取决于它是哪种类型。我知道这是基本的C#,但我不了解。

最佳答案

根据thisWaveFormatExtensibleWaveFormat的子类型:

public class WaveFormatExtensible : WaveFormat


因此,您所看到的称为Liskov Substitution Principle


  可替换性是面向对象编程中的一个原则。它
  声明在计算机程序中,如果S(WaveFormatExtensible)是T(WaveFormat)的子类型,则
  类型T的对象可以替换为类型S的对象(即,
  类型S的对象可以替换类型T的对象,而无需更改
  该程序的任何理想属性(正确性,任务
  执行等)。


因为WaveFormatExtensible派生自WaveFormat,所以它有资格作为方法的返回类型。

10-04 15:10