【发布时间】:2014-06-12 21:24:51
【问题描述】:
在基础架构 (CLI/.Net/Mono) 级别的 AFAIK 有一种表示数组的类型:System.Array。
从物理上讲,这是一个线性的值序列,但从逻辑上讲,它们可以被认为是在多个维度中组织的。
在语言级别(例如 C#),这种逻辑视图受益于一些语法糖:
2D: T[,]
3D: T[,,]
42D: T[,,,...,,,]
有一个明显的参数多态性,例如在一维数组后面可以隐藏多种类型的数组:
Array of integers: int[]
Array of strings references: string[]
Array of objects references: object[]
但是您如何描述结构多态性,即数组可以有多个维度这一事实?
在基础设施层面,这不再是类型系统的一部分,只是一个逻辑视图,所以我认为根本不存在多态性。
但在语言级别,它可能被认为是某种包含多态性,因为所有数组在逻辑上都表示为从公共基类继承的不同类型。
欢迎任何输入和更正。
【问题讨论】:
-
我不知道程序员可以使用它的任何情况,所以我根本不会称之为多态性;您的 42D 数组永远不会在程序中采用另一种数组形式,因为数组可以被视为类
Object。 -
@JohnC: AFAIK 你可以有一个方法来接受
System.Array并根据它的维度转储它的值。这显然是多态性。并且可能是某种包含多态性。 -
数组类型也存在于 CLR 级别。不仅仅是在 C# 级别。但是,这两种类型系统并不完全一致。数组维度不仅仅是一个逻辑概念。您不能将数组转换为不同的维度。尺寸存储在对象中并且是固定的。
标签: c# .net arrays oop polymorphism