.Net 2.0 新功能:委托中的协变与逆变(Covariance and Contravariance in Delegates)
2007-09-03 15:58
591 查看
委托中的协变与逆变(Covariance and Contravariance in Delegates)
委托中的协变
1. 当委托方法的返回类型具有的派生程序比委托签名更大时,就称为协变委托方法。因为方法的返回类型比委托签名的返回类型更具体,所以可对其进行隐式转换,这样该方法就可用作委托。
2. 协变使得创建可被类和派生类同时使用的委托方法成为可能。
class Animals ...{ }
class Dogs : Animals ...{ }
class Program
...{
public delegate Animals HandlerMethod();
public static Animals FirstHandler() ...{ return null; }
public static Dogs SecondHandler() ...{ return null; }
static void Main()
...{
HandlerMethod handler1 = FirstHandler;
HandlerMethod handler2 = SecondHandler;
}
}
委托中的逆变
3. 当委托方法签名具有一个或多个参数,并且这些参数的类型派生自方法参数的类型时,就称为逆变委托方法。因为委托方法签名参数比方法参数更具体,因此可在传递给处理程序方法时对他们隐式转换。
4. 这样逆变使得大量类使用的更通用的委托方法的创建变得更简单。
class Animals ...{ }
class Dogs : Animals ...{ }
class Program
...{
public delegate void HandlerMethod(Dogs dog);
public static void FirstHandler(Animals elephant) ...{ return null; }
public static void SecondHandler(Dogs adog) ...{ return null; }
static void Main(string[] arg)
...{
HandlerMethod handler1 = FirstHandler;
HandlerMethod handler2 = SecondHandler;
}
}
委托中的协变
1. 当委托方法的返回类型具有的派生程序比委托签名更大时,就称为协变委托方法。因为方法的返回类型比委托签名的返回类型更具体,所以可对其进行隐式转换,这样该方法就可用作委托。
2. 协变使得创建可被类和派生类同时使用的委托方法成为可能。
class Animals ...{ }
class Dogs : Animals ...{ }
class Program
...{
public delegate Animals HandlerMethod();
public static Animals FirstHandler() ...{ return null; }
public static Dogs SecondHandler() ...{ return null; }
static void Main()
...{
HandlerMethod handler1 = FirstHandler;
HandlerMethod handler2 = SecondHandler;
}
}
委托中的逆变
3. 当委托方法签名具有一个或多个参数,并且这些参数的类型派生自方法参数的类型时,就称为逆变委托方法。因为委托方法签名参数比方法参数更具体,因此可在传递给处理程序方法时对他们隐式转换。
4. 这样逆变使得大量类使用的更通用的委托方法的创建变得更简单。
class Animals ...{ }
class Dogs : Animals ...{ }
class Program
...{
public delegate void HandlerMethod(Dogs dog);
public static void FirstHandler(Animals elephant) ...{ return null; }
public static void SecondHandler(Dogs adog) ...{ return null; }
static void Main(string[] arg)
...{
HandlerMethod handler1 = FirstHandler;
HandlerMethod handler2 = SecondHandler;
}
}
相关文章推荐
- .Net 2.0 新功能:委托中的协变与逆变(Covariance and Contravariance in Delegates)
- .Net 2.0 新功能:委托中的协变与逆变(Covariance and Contravariance in Delegates)
- Covariance and Contravariance in Generics(泛型中的协变和逆变)
- Delegate(委托)中的Covariance(协变)和Contravariance(逆变)
- 随谈.net 2.0中委托的协变和逆变特性
- 对协变和逆变的理解(Contravariance and Covariance)
- Covariance and Contravariance in C#, Part One
- C#基础笔记——协变(Covariance)和逆变(Contravariance)
- 泛型中的协变Covariance和逆变Contravariance
- 协变(covariance),逆变(contravariance)与不变(invariance)
- Covariance and Contravariance in C#, Part Two: Array Covariance
- C# 中的委托和事件(http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx)
- 协变(Covariance)与逆变(Contravariance)
- 利用webservice和.net技术上传和下载文件--Sending files in chunks with MTOM Web Services and .NET 2.0 from:http://www.codeproject.com/soap/MTO
- Covariance and Contravariance in C#, Part Three: Method Group Conversion Variance
- Covariance and Contravariance in C#, Part Nine: Breaking Changes
- Covariance and Contravariance in C#, Part One
- Covariance and Contravariance in C#, Part Four: Real Delegate Variance
- Covariance and Contravariance in C# Part Seven: Why Do We Need A Syntax At All?
- Covariance and Contravariance in C#, Part Ten: Dealing With Ambiguity