我理解泛型中的"T"在这个例子中是什么:
public interface IEquatable<T>
{
bool Equals(T other);
}
Run Code Online (Sandbox Code Playgroud)
但是在这个例子中不要理解"在T中":
public interface IComparer<in T>
{
int Compare(T x, T y);
}
Run Code Online (Sandbox Code Playgroud)
和"out T"在这个例子中:
public interface IEnumerable<out T> : IEnumerable
{
IEnumerator<T> GetEnumerator();
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮我理解这个吗?
<out T>表示T是协变的.
一系列长颈鹿可以被视为一系列动物似乎是合理的.的接口的"协方差"指的是"如果存在来自隐式引用转换Giraffe到Animal接着也有从隐式引用转换I<Giraffe>到I<Animal>.构造类型的可兑换'在相同的方向上变化’为类型参数的兑换.
例:
// Valid! // Invalid!
// Every giraffe is an animal // Not every animal is a giraffe
IEnumerable<Giraffe> giraffes = ...; IEnumerable<Animal> animals = ...;
IEnumerable<Animal> animals = giraffe; IEnumerable<Giraffe> giraffes = animals;
Animal animal = animals.First(); Giraffe giraffe = giraffes.First();
Run Code Online (Sandbox Code Playgroud)
<in T>表示T是逆变的.
可以比较两只动物的代码似乎也可以比较两只长颈鹿似乎是合理的.界面的"逆变量"与反转方向的协方差相同.这意味着,"如果存在来自隐式引用转换Giraffe到Animal接着也有从隐式引用转换I<Animal>到I<Giraffe>.构造类型的可兑换'在相反的方向上变化’为类型参数的兑换.
例:
// Valid! // Invalid!
// Animal comparer can compare // Giraffe comparer cannot compare
// giraffes // arbitrary animals
IComparer<Animal> animalC = ...; IComparer<Giraffe> giraffeC = ...;
IComparer<Giraffe> giraffeC = animalC; IComparer<Animal> animalC = giraffeC;
int result = giraffeC.Compare(x, y); int result = animalC.Compare(x, y);
Run Code Online (Sandbox Code Playgroud)
看到:
| 归档时间: |
|
| 查看次数: |
563 次 |
| 最近记录: |