在这里无法理解问题:
public interface ILinkedTabularSectionManager<out T1> where T1 : TabularBusinessObject
{
T1 LinkedTabularBusinessObject { get; }
BindingList<T1> DataSource { get; }
}
C#无效方差:类型参数必须始终有效。 是协变的。
错误与BindingList声明有关。
谢谢。
答案 0 :(得分:1)
协变接口只能返回使用varable类型的协变泛型类型。这意味着DataSource
属性的返回值也必须是协变的。 BindingList
不是协变的,因此它不能由协变接口的方法或属性返回。与BindingList<T>
最接近的协变接口是IReadOnlyList<T>
(BindingList<T>
实现了它),因此您可能要使用此接口:
public interface ILinkedTabularSectionManager<out T1> where T1 : TabularBusinessObject
{
T1 LinkedTabularBusinessObject { get; }
IReadOnlyList<T1> DataSource { get; }
}
答案 1 :(得分:0)
在声明变量类型时,您只能使用单一变量类型。
例如,如果T1
是协变的(您的情况),则接口成员中的任何一个都不能使用不变或矛盾的数据类型:
// This is valid: T in IEnumerable<T> is covariant
public interface ILinkedTabularSectionManager<out T1> where T1 : TabularBusinessObject
{
T1 LinkedTabularBusinessObject { get; }
IEnumerable<T1> DataSource { get; }
}
// This is invalid: T in BindingList<T> is invariant
public interface ILinkedTabularSectionManager<out T1> where T1 : TabularBusinessObject
{
T1 LinkedTabularBusinessObject { get; }
BindingList<T1> DataSource { get; }
}
// This is invalid: T in Action<T> is contravariant
public interface ILinkedTabularSectionManager<out T1> where T1 : TabularBusinessObject
{
T1 LinkedTabularBusinessObject { get; }
Action<T1> SomeAction { get; }
}