一.扩展方法
public class Method
{
public void C01()
{
DateTime now = DateTime.Now;
now.FmtDate();
}
}
public static class ExMethod
{
/// <summary>
/// 扩展方法的要素:
/// 1.此方法必须是一个静态方法
/// 2.此方法必须在静态类中
/// 3.此方法的第一个参数必须以this开头,并且制定此方法是扩展自那个类型上
/// 4.扩展方法扩展自哪个类型,就必须是此类型的变量来点出来
/// 5.扩展方法中的this后面的参数不属于方法的参数
/// 6.如果扩展方法和实例方法的名相同,优先调用实例方法
/// 7.扩展自父类上的方法,可以被子类的对象直接使用
/// 8.扩展自接口类上的方法,可以被实现类的对象直接使用
/// 9.扩展方法的本质,最终还是被编译器编译成了静态类点静态方法()
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string FmtDate(this DateTime dt)
{
return dt.ToString("yyyy-MM-dd HH:mm:ss");
}
public static string FmtDate(this DateTime dt,string sf)
{
return dt.ToString("yyyy-MM-dd HH:mm:ss")+sf;
}
public static string FmtT<T>(this T t)
{
return "";
}
}
二.协变逆变
/// <summary>
/// 只能用在泛型接口和泛型委托中
/// </summary>
/// <typeparam name="T">只能做参数输入</typeparam>
/// <typeparam name="V">只能做返回值</typeparam>
public interface IOutIn<in T,out V>
{
}
public delegate T DGen<out T,in V>(V v);