逆变与协变原理如何详细阐述?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2269个文字,预计阅读时间需要10分钟。
在数学和物理学中,逆变(contravariant)与协变(covariant)是描述向量或张量在不同坐标变换下如何变化的术语。
逆变:当一个向量或张量在坐标变换下,其分量以与坐标变换相反的方式变化时,我们称其为逆变。例如,在直角坐标系中,一个点的坐标变换为 \( (x', y', z')=(x, y, z) \),则其逆变坐标为 \( (x, y, z) \)。
协变:当一个向量或张量在坐标变换下,其分量以与坐标变换相同的方式变化时,我们称其为协变。在上述例子中,一个向量的分量 \( (u, v, w) \) 在坐标变换下变为 \( (u', v', w')=(u, v, w) \),则其协变分量也是 \( (u, v, w) \)。
这两个概念在描述物理现象时尤为重要,尤其是在相对论中,它们帮助我们在不同参考系之间正确地转换物理量。
逆变(contravariant)与协变(covariant)是C#4新增的概念,许多书籍和博客都有讲解,我觉得都没有把它们讲清楚,搞明白了它们,可以更准确地去定义泛型委托和接口,这里我尝试画图详细解析逆变与协变。
变的概念我们都知道.Net里或者说在OO的世界里,可以安全地把子类的引用赋给父类引用,例如:
//父类 = 子类 string str = "string"; object obj = str;//变了
而C#里又有泛型的概念,泛型是对类型系统的进一步抽象,比上面简单的类型高级,把上面的变化体现在泛型的参数上就是我们所说的逆变与协变的概念。通过在泛型参数上使用in或out关键字,可以得到逆变或协变的能力。
本文共计2269个文字,预计阅读时间需要10分钟。
在数学和物理学中,逆变(contravariant)与协变(covariant)是描述向量或张量在不同坐标变换下如何变化的术语。
逆变:当一个向量或张量在坐标变换下,其分量以与坐标变换相反的方式变化时,我们称其为逆变。例如,在直角坐标系中,一个点的坐标变换为 \( (x', y', z')=(x, y, z) \),则其逆变坐标为 \( (x, y, z) \)。
协变:当一个向量或张量在坐标变换下,其分量以与坐标变换相同的方式变化时,我们称其为协变。在上述例子中,一个向量的分量 \( (u, v, w) \) 在坐标变换下变为 \( (u', v', w')=(u, v, w) \),则其协变分量也是 \( (u, v, w) \)。
这两个概念在描述物理现象时尤为重要,尤其是在相对论中,它们帮助我们在不同参考系之间正确地转换物理量。
逆变(contravariant)与协变(covariant)是C#4新增的概念,许多书籍和博客都有讲解,我觉得都没有把它们讲清楚,搞明白了它们,可以更准确地去定义泛型委托和接口,这里我尝试画图详细解析逆变与协变。
变的概念我们都知道.Net里或者说在OO的世界里,可以安全地把子类的引用赋给父类引用,例如:
//父类 = 子类 string str = "string"; object obj = str;//变了
而C#里又有泛型的概念,泛型是对类型系统的进一步抽象,比上面简单的类型高级,把上面的变化体现在泛型的参数上就是我们所说的逆变与协变的概念。通过在泛型参数上使用in或out关键字,可以得到逆变或协变的能力。

