我正在阅读这段代码:
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#,但我不了解。
最佳答案
根据this,WaveFormatExtensible
是WaveFormat
的子类型:
public class WaveFormatExtensible : WaveFormat
因此,您所看到的称为Liskov Substitution Principle:
可替换性是面向对象编程中的一个原则。它
声明在计算机程序中,如果S(WaveFormatExtensible)是T(WaveFormat)的子类型,则
类型T的对象可以替换为类型S的对象(即,
类型S的对象可以替换类型T的对象,而无需更改
该程序的任何理想属性(正确性,任务
执行等)。
因为
WaveFormatExtensible
派生自WaveFormat
,所以它有资格作为方法的返回类型。