我在阅读 Is(), Fluent Condition Checker Library (http://islib.codeplex.com/SourceControl/changeset/view/65858#1126092)的时候发现这样的代码:
1 public interface IIs<TTarget> {} 2 public abstract class IsBase<T, TTarget> : IIs<TTarget> where T : IsBase<T, TTarget> {} 3 public sealed class Is<TTarget> : IsBase<Is<TTarget>, TTarget> {}
类 class Is<TTarget> : IsBase<Is<TTarget>, TTarget> 为什么会如此继承?这样做的好处是什么?
你问的这个开源项目我没有看过,但是从你贴出的3个定义来看,作者很有可能是为了实现链式编程。你可以去看看这3个定义在哪里使用过来验证一下。下面是我简化过的例子,来说明这样有什么好处。
interface IVehicle { string Name { get; } string Color { get; } } abstract class Vehicle<TSelf> : IVehicle where TSelf : Vehicle<TSelf> { private string m_name, m_color; public TSelf Name(string name) { m_name = name; return (TSelf)this; } public TSelf Color(string color) { m_color = color; return (TSelf)this; } string IVehicle.Name { get { return m_name; } } string IVehicle.Color { get { return m_color; } } } class Car : Vehicle<Car> { //car 没什么特殊的方法 } class Tractor<TGoods> : Vehicle<Tractor<TGoods>> { public Tractor<TGoods> Load(TGoods goods) { //load the goods return this; } }
用法:
var tractor = new Tractor<object>(); tractor.Color("red").Name("我的车").Load("随便一个货物").Name("顺序无所谓的").Color("再刷层漆盖掉"); var car = new Car(); car.Name("小车").Color("green");
Thank you
泛型類。泛型接口。你可以查一下,泛型的特點
你想说什么?