问题描述
到目前为止,我发现我已经能够将类更改为结构体,但有以下注意事项:
但是一旦我了解了所有这些差异,对于小的只读类,这从未导致任何下游问题。
但是在我的一个课程中,我最近开始遇到编译错误。我把范围缩小到这个minimal example:
using System;
public class Test
{
private class A {}
private class B : A {}
private interface I<out T> {}
private class C<T> : I<T> {}
private struct S<T> : I<T> {}
private static void F(I<A> _) {}
private static void G(I<I<A>> _) {}
public static void Main()
{
F(new C<B>());
F(new S<B>());
G(new C<C<B>>());
G(new S<C<B>>());
// G(new C<S<B>>()); // compile error
// G(new S<S<B>>()); // compile error
}
}
似乎协方差适用于一个结构,结构只能有一层协方差,而类可以将它们的协方差嵌套到无限深。
我的问题是?
- 这是怎么回事?
- C# 规范中描述这一点的规则是什么?
- 有人可以用通俗的语言解释这条规则吗?
- 在创建结构时,我应该考虑这条规则的任何其他后果吗?
(如果你不能回答所有四个问题,没关系)。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)